16c9f99dfSJanosch Frank /* SPDX-License-Identifier: GPL-2.0-only */ 22d0d5f41SDavid Hildenbrand /* 32d0d5f41SDavid Hildenbrand * Copyright (c) 2018 Red Hat Inc 42d0d5f41SDavid Hildenbrand * 52d0d5f41SDavid Hildenbrand * Authors: 62d0d5f41SDavid Hildenbrand * David Hildenbrand <david@redhat.com> 72d0d5f41SDavid Hildenbrand */ 8eb5a1bbaSCornelia Huck #ifndef _ASMS390X_FLOAT_H_ 9eb5a1bbaSCornelia Huck #define _ASMS390X_FLOAT_H_ 102d0d5f41SDavid Hildenbrand set_fpc(uint32_t fpc)112d0d5f41SDavid Hildenbrandstatic inline void set_fpc(uint32_t fpc) 122d0d5f41SDavid Hildenbrand { 132d0d5f41SDavid Hildenbrand asm volatile(" lfpc %0\n" : : "m"(fpc) ); 142d0d5f41SDavid Hildenbrand } 152d0d5f41SDavid Hildenbrand get_fpc(void)162d0d5f41SDavid Hildenbrandstatic inline uint32_t get_fpc(void) 172d0d5f41SDavid Hildenbrand { 182d0d5f41SDavid Hildenbrand uint32_t fpc; 192d0d5f41SDavid Hildenbrand 202d0d5f41SDavid Hildenbrand asm volatile(" stfpc %0\n" : "=m"(fpc)); 212d0d5f41SDavid Hildenbrand 222d0d5f41SDavid Hildenbrand return fpc; 232d0d5f41SDavid Hildenbrand } 242d0d5f41SDavid Hildenbrand get_fpc_dxc(void)25dfe993b0SThomas Huthstatic inline uint8_t get_fpc_dxc(void) 262d0d5f41SDavid Hildenbrand { 272d0d5f41SDavid Hildenbrand return get_fpc() >> 8; 282d0d5f41SDavid Hildenbrand } 292d0d5f41SDavid Hildenbrand set_fpc_dxc(uint8_t dxc)302d0d5f41SDavid Hildenbrandstatic inline void set_fpc_dxc(uint8_t dxc) 312d0d5f41SDavid Hildenbrand { 322d0d5f41SDavid Hildenbrand uint32_t fpc = get_fpc(); 332d0d5f41SDavid Hildenbrand 342d0d5f41SDavid Hildenbrand fpc = (fpc & ~0xff00) | ((uint32_t)dxc) << 8; 352d0d5f41SDavid Hildenbrand 362d0d5f41SDavid Hildenbrand set_fpc(fpc); 372d0d5f41SDavid Hildenbrand } 382d0d5f41SDavid Hildenbrand afp_enable(void)392d0d5f41SDavid Hildenbrandstatic inline void afp_enable(void) 402d0d5f41SDavid Hildenbrand { 41*1b2c0437SClaudio Imbrenda ctl_set_bit(0, CTL0_AFP); 422d0d5f41SDavid Hildenbrand } 432d0d5f41SDavid Hildenbrand afp_disable(void)442d0d5f41SDavid Hildenbrandstatic inline void afp_disable(void) 452d0d5f41SDavid Hildenbrand { 46*1b2c0437SClaudio Imbrenda ctl_clear_bit(0, CTL0_AFP); 472d0d5f41SDavid Hildenbrand } 482d0d5f41SDavid Hildenbrand 492d0d5f41SDavid Hildenbrand #endif 50