cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pci_sun4v_asm.S (7593B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* pci_sun4v_asm: Hypervisor calls for PCI support.
      3 *
      4 * Copyright (C) 2006, 2008 David S. Miller <davem@davemloft.net>
      5 */
      6
      7#include <linux/linkage.h>
      8#include <asm/hypervisor.h>
      9
     10	/* %o0: devhandle
     11	 * %o1:	tsbid
     12	 * %o2:	num ttes
     13	 * %o3:	io_attributes
     14	 * %o4:	io_page_list phys address
     15	 *
     16	 * returns %o0:	-status if status was non-zero, else
     17	 *         %o0:	num pages mapped
     18	 */
     19ENTRY(pci_sun4v_iommu_map)
     20	mov	%o5, %g1
     21	mov	HV_FAST_PCI_IOMMU_MAP, %o5
     22	ta	HV_FAST_TRAP
     23	brnz,pn %o0, 1f
     24	 sub	%g0, %o0, %o0
     25	mov	%o1, %o0
     261:	retl
     27	 nop
     28ENDPROC(pci_sun4v_iommu_map)
     29
     30	/* %o0: devhandle
     31	 * %o1:	tsbid
     32	 * %o2:	num ttes
     33	 *
     34	 * returns %o0:	num ttes demapped
     35	 */
     36ENTRY(pci_sun4v_iommu_demap)
     37	mov	HV_FAST_PCI_IOMMU_DEMAP, %o5
     38	ta	HV_FAST_TRAP
     39	retl
     40	 mov	%o1, %o0
     41ENDPROC(pci_sun4v_iommu_demap)
     42
     43	/* %o0: devhandle
     44	 * %o1:	tsbid
     45	 * %o2:	&io_attributes
     46	 * %o3:	&real_address
     47	 *
     48	 * returns %o0:	status
     49	 */
     50ENTRY(pci_sun4v_iommu_getmap)
     51	mov	%o2, %o4
     52	mov	HV_FAST_PCI_IOMMU_GETMAP, %o5
     53	ta	HV_FAST_TRAP
     54	stx	%o1, [%o4]
     55	stx	%o2, [%o3]
     56	retl
     57	 mov	%o0, %o0
     58ENDPROC(pci_sun4v_iommu_getmap)
     59
     60	/* %o0: devhandle
     61	 * %o1:	pci_device
     62	 * %o2:	pci_config_offset
     63	 * %o3:	size
     64	 *
     65	 * returns %o0:	data
     66	 *
     67	 * If there is an error, the data will be returned
     68	 * as all 1's.
     69	 */
     70ENTRY(pci_sun4v_config_get)
     71	mov	HV_FAST_PCI_CONFIG_GET, %o5
     72	ta	HV_FAST_TRAP
     73	brnz,a,pn %o1, 1f
     74	 mov	-1, %o2
     751:	retl
     76	 mov	%o2, %o0
     77ENDPROC(pci_sun4v_config_get)
     78
     79	/* %o0: devhandle
     80	 * %o1:	pci_device
     81	 * %o2:	pci_config_offset
     82	 * %o3:	size
     83	 * %o4:	data
     84	 *
     85	 * returns %o0:	status
     86	 *
     87	 * status will be zero if the operation completed
     88	 * successfully, else -1 if not
     89	 */
     90ENTRY(pci_sun4v_config_put)
     91	mov	HV_FAST_PCI_CONFIG_PUT, %o5
     92	ta	HV_FAST_TRAP
     93	brnz,a,pn %o1, 1f
     94	 mov	-1, %o1
     951:	retl
     96	 mov	%o1, %o0
     97ENDPROC(pci_sun4v_config_put)
     98
     99	/* %o0: devhandle
    100	 * %o1: msiqid
    101	 * %o2: msiq phys address
    102	 * %o3: num entries
    103	 *
    104	 * returns %o0: status
    105	 *
    106	 * status will be zero if the operation completed
    107	 * successfully, else -1 if not
    108	 */
    109ENTRY(pci_sun4v_msiq_conf)
    110	mov	HV_FAST_PCI_MSIQ_CONF, %o5
    111	ta	HV_FAST_TRAP
    112	retl
    113	 mov	%o0, %o0
    114ENDPROC(pci_sun4v_msiq_conf)
    115
    116	/* %o0: devhandle
    117	 * %o1: msiqid
    118	 * %o2:	&msiq_phys_addr
    119	 * %o3:	&msiq_num_entries
    120	 *
    121	 * returns %o0: status
    122	 */
    123ENTRY(pci_sun4v_msiq_info)
    124	mov	%o2, %o4
    125	mov	HV_FAST_PCI_MSIQ_INFO, %o5
    126	ta	HV_FAST_TRAP
    127	stx	%o1, [%o4]
    128	stx	%o2, [%o3]
    129	retl
    130	 mov	%o0, %o0
    131ENDPROC(pci_sun4v_msiq_info)
    132
    133	/* %o0: devhandle
    134	 * %o1: msiqid
    135	 * %o2:	&valid
    136	 *
    137	 * returns %o0: status
    138	 */
    139ENTRY(pci_sun4v_msiq_getvalid)
    140	mov	HV_FAST_PCI_MSIQ_GETVALID, %o5
    141	ta	HV_FAST_TRAP
    142	stx	%o1, [%o2]
    143	retl
    144	 mov	%o0, %o0
    145ENDPROC(pci_sun4v_msiq_getvalid)
    146
    147	/* %o0: devhandle
    148	 * %o1: msiqid
    149	 * %o2:	valid
    150	 *
    151	 * returns %o0: status
    152	 */
    153ENTRY(pci_sun4v_msiq_setvalid)
    154	mov	HV_FAST_PCI_MSIQ_SETVALID, %o5
    155	ta	HV_FAST_TRAP
    156	retl
    157	 mov	%o0, %o0
    158ENDPROC(pci_sun4v_msiq_setvalid)
    159
    160	/* %o0: devhandle
    161	 * %o1: msiqid
    162	 * %o2:	&state
    163	 *
    164	 * returns %o0: status
    165	 */
    166ENTRY(pci_sun4v_msiq_getstate)
    167	mov	HV_FAST_PCI_MSIQ_GETSTATE, %o5
    168	ta	HV_FAST_TRAP
    169	stx	%o1, [%o2]
    170	retl
    171	 mov	%o0, %o0
    172ENDPROC(pci_sun4v_msiq_getstate)
    173
    174	/* %o0: devhandle
    175	 * %o1: msiqid
    176	 * %o2:	state
    177	 *
    178	 * returns %o0: status
    179	 */
    180ENTRY(pci_sun4v_msiq_setstate)
    181	mov	HV_FAST_PCI_MSIQ_SETSTATE, %o5
    182	ta	HV_FAST_TRAP
    183	retl
    184	 mov	%o0, %o0
    185ENDPROC(pci_sun4v_msiq_setstate)
    186
    187	/* %o0: devhandle
    188	 * %o1: msiqid
    189	 * %o2:	&head
    190	 *
    191	 * returns %o0: status
    192	 */
    193ENTRY(pci_sun4v_msiq_gethead)
    194	mov	HV_FAST_PCI_MSIQ_GETHEAD, %o5
    195	ta	HV_FAST_TRAP
    196	stx	%o1, [%o2]
    197	retl
    198	 mov	%o0, %o0
    199ENDPROC(pci_sun4v_msiq_gethead)
    200
    201	/* %o0: devhandle
    202	 * %o1: msiqid
    203	 * %o2:	head
    204	 *
    205	 * returns %o0: status
    206	 */
    207ENTRY(pci_sun4v_msiq_sethead)
    208	mov	HV_FAST_PCI_MSIQ_SETHEAD, %o5
    209	ta	HV_FAST_TRAP
    210	retl
    211	 mov	%o0, %o0
    212ENDPROC(pci_sun4v_msiq_sethead)
    213
    214	/* %o0: devhandle
    215	 * %o1: msiqid
    216	 * %o2:	&tail
    217	 *
    218	 * returns %o0: status
    219	 */
    220ENTRY(pci_sun4v_msiq_gettail)
    221	mov	HV_FAST_PCI_MSIQ_GETTAIL, %o5
    222	ta	HV_FAST_TRAP
    223	stx	%o1, [%o2]
    224	retl
    225	 mov	%o0, %o0
    226ENDPROC(pci_sun4v_msiq_gettail)
    227
    228	/* %o0: devhandle
    229	 * %o1: msinum
    230	 * %o2:	&valid
    231	 *
    232	 * returns %o0: status
    233	 */
    234ENTRY(pci_sun4v_msi_getvalid)
    235	mov	HV_FAST_PCI_MSI_GETVALID, %o5
    236	ta	HV_FAST_TRAP
    237	stx	%o1, [%o2]
    238	retl
    239	 mov	%o0, %o0
    240ENDPROC(pci_sun4v_msi_getvalid)
    241
    242	/* %o0: devhandle
    243	 * %o1: msinum
    244	 * %o2:	valid
    245	 *
    246	 * returns %o0: status
    247	 */
    248ENTRY(pci_sun4v_msi_setvalid)
    249	mov	HV_FAST_PCI_MSI_SETVALID, %o5
    250	ta	HV_FAST_TRAP
    251	retl
    252	 mov	%o0, %o0
    253ENDPROC(pci_sun4v_msi_setvalid)
    254
    255	/* %o0: devhandle
    256	 * %o1: msinum
    257	 * %o2:	&msiq
    258	 *
    259	 * returns %o0: status
    260	 */
    261ENTRY(pci_sun4v_msi_getmsiq)
    262	mov	HV_FAST_PCI_MSI_GETMSIQ, %o5
    263	ta	HV_FAST_TRAP
    264	stx	%o1, [%o2]
    265	retl
    266	 mov	%o0, %o0
    267ENDPROC(pci_sun4v_msi_getmsiq)
    268
    269	/* %o0: devhandle
    270	 * %o1: msinum
    271	 * %o2:	msitype
    272	 * %o3:	msiq
    273	 *
    274	 * returns %o0: status
    275	 */
    276ENTRY(pci_sun4v_msi_setmsiq)
    277	mov	HV_FAST_PCI_MSI_SETMSIQ, %o5
    278	ta	HV_FAST_TRAP
    279	retl
    280	 mov	%o0, %o0
    281ENDPROC(pci_sun4v_msi_setmsiq)
    282
    283	/* %o0: devhandle
    284	 * %o1: msinum
    285	 * %o2:	&state
    286	 *
    287	 * returns %o0: status
    288	 */
    289ENTRY(pci_sun4v_msi_getstate)
    290	mov	HV_FAST_PCI_MSI_GETSTATE, %o5
    291	ta	HV_FAST_TRAP
    292	stx	%o1, [%o2]
    293	retl
    294	 mov	%o0, %o0
    295ENDPROC(pci_sun4v_msi_getstate)
    296
    297	/* %o0: devhandle
    298	 * %o1: msinum
    299	 * %o2:	state
    300	 *
    301	 * returns %o0: status
    302	 */
    303ENTRY(pci_sun4v_msi_setstate)
    304	mov	HV_FAST_PCI_MSI_SETSTATE, %o5
    305	ta	HV_FAST_TRAP
    306	retl
    307	 mov	%o0, %o0
    308ENDPROC(pci_sun4v_msi_setstate)
    309
    310	/* %o0: devhandle
    311	 * %o1: msinum
    312	 * %o2:	&msiq
    313	 *
    314	 * returns %o0: status
    315	 */
    316ENTRY(pci_sun4v_msg_getmsiq)
    317	mov	HV_FAST_PCI_MSG_GETMSIQ, %o5
    318	ta	HV_FAST_TRAP
    319	stx	%o1, [%o2]
    320	retl
    321	 mov	%o0, %o0
    322ENDPROC(pci_sun4v_msg_getmsiq)
    323
    324	/* %o0: devhandle
    325	 * %o1: msinum
    326	 * %o2:	msiq
    327	 *
    328	 * returns %o0: status
    329	 */
    330ENTRY(pci_sun4v_msg_setmsiq)
    331	mov	HV_FAST_PCI_MSG_SETMSIQ, %o5
    332	ta	HV_FAST_TRAP
    333	retl
    334	 mov	%o0, %o0
    335ENDPROC(pci_sun4v_msg_setmsiq)
    336
    337	/* %o0: devhandle
    338	 * %o1: msinum
    339	 * %o2:	&valid
    340	 *
    341	 * returns %o0: status
    342	 */
    343ENTRY(pci_sun4v_msg_getvalid)
    344	mov	HV_FAST_PCI_MSG_GETVALID, %o5
    345	ta	HV_FAST_TRAP
    346	stx	%o1, [%o2]
    347	retl
    348	 mov	%o0, %o0
    349ENDPROC(pci_sun4v_msg_getvalid)
    350
    351	/* %o0: devhandle
    352	 * %o1: msinum
    353	 * %o2:	valid
    354	 *
    355	 * returns %o0: status
    356	 */
    357ENTRY(pci_sun4v_msg_setvalid)
    358	mov	HV_FAST_PCI_MSG_SETVALID, %o5
    359	ta	HV_FAST_TRAP
    360	retl
    361	 mov	%o0, %o0
    362ENDPROC(pci_sun4v_msg_setvalid)
    363
    364	/*
    365	 * %o0:	devhandle
    366	 * %o1:	r_addr
    367	 * %o2:	size
    368	 * %o3:	pagesize
    369	 * %o4:	virt
    370	 * %o5: &iotsb_num/&iotsb_handle
    371	 *
    372	 * returns %o0:	status
    373	 *         %o1:	iotsb_num/iotsb_handle
    374	 */
    375ENTRY(pci_sun4v_iotsb_conf)
    376	mov	%o5, %g1
    377	mov	HV_FAST_PCI_IOTSB_CONF, %o5
    378	ta	HV_FAST_TRAP
    379	retl
    380	 stx	%o1, [%g1]
    381ENDPROC(pci_sun4v_iotsb_conf)
    382
    383	/*
    384	 * %o0:	devhandle
    385	 * %o1:	iotsb_num/iotsb_handle
    386	 * %o2:	pci_device
    387	 *
    388	 * returns %o0:	status
    389	 */
    390ENTRY(pci_sun4v_iotsb_bind)
    391	mov	HV_FAST_PCI_IOTSB_BIND, %o5
    392	ta	HV_FAST_TRAP
    393	retl
    394	 nop
    395ENDPROC(pci_sun4v_iotsb_bind)
    396
    397	/*
    398	 * %o0:	devhandle
    399	 * %o1:	iotsb_num/iotsb_handle
    400	 * %o2:	index_count
    401	 * %o3:	iotte_attributes
    402	 * %o4:	io_page_list_p
    403	 * %o5: &mapped
    404	 *
    405	 * returns %o0:	status
    406	 *         %o1:	#mapped
    407	 */
    408ENTRY(pci_sun4v_iotsb_map)
    409	mov	%o5, %g1
    410	mov	HV_FAST_PCI_IOTSB_MAP, %o5
    411	ta	HV_FAST_TRAP
    412	retl
    413	 stx	%o1, [%g1]
    414ENDPROC(pci_sun4v_iotsb_map)
    415
    416	/*
    417	 * %o0:	devhandle
    418	 * %o1:	iotsb_num/iotsb_handle
    419	 * %o2:	iotsb_index
    420	 * %o3:	#iottes
    421	 * %o4: &demapped
    422	 *
    423	 * returns %o0:	status
    424	 *         %o1:	#demapped
    425	 */
    426ENTRY(pci_sun4v_iotsb_demap)
    427	mov	HV_FAST_PCI_IOTSB_DEMAP, %o5
    428	ta	HV_FAST_TRAP
    429	retl
    430	 stx	%o1, [%o4]
    431ENDPROC(pci_sun4v_iotsb_demap)