Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/sparc/kernel/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 7 kB image not shown  

Quelle  pci_sun4v_asm.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0 */
/* pci_sun4v_asm: Hypervisor calls for PCI support.
 *
 * Copyright (C) 2006, 2008 David S. Miller <davem@davemloft.net>
 */


#include <linux/linkage.h>
#include <asm/hypervisor.h>

 /* %o0: devhandle
 * %o1: tsbid
 * %o2: num ttes
 * %o3: io_attributes
 * %o4: io_page_list phys address
 *
 * returns %o0: -status if status was non-zero, else
 *         %o0: num pages mapped
 */

ENTRY(pci_sun4v_iommu_map)
 mov %o5, %g1
 mov HV_FAST_PCI_IOMMU_MAP, %o5
 ta HV_FAST_TRAP
 brnz,pn %o0, 1f
  sub %g0, %o0, %o0
 mov %o1, %o0
1: retl
  nop
ENDPROC(pci_sun4v_iommu_map)

 /* %o0: devhandle
 * %o1: tsbid
 * %o2: num ttes
 *
 * returns %o0: num ttes demapped
 */

ENTRY(pci_sun4v_iommu_demap)
 mov HV_FAST_PCI_IOMMU_DEMAP, %o5
 ta HV_FAST_TRAP
 retl
  mov %o1, %o0
ENDPROC(pci_sun4v_iommu_demap)

 /* %o0: devhandle
 * %o1: tsbid
 * %o2: &io_attributes
 * %o3: &real_address
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_iommu_getmap)
 mov %o2, %o4
 mov HV_FAST_PCI_IOMMU_GETMAP, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o4]
 stx %o2, [%o3]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_iommu_getmap)

 /* %o0: devhandle
 * %o1: pci_device
 * %o2: pci_config_offset
 * %o3: size
 *
 * returns %o0: data
 *
 * If there is an error, the data will be returned
 * as all 1's.
 */

ENTRY(pci_sun4v_config_get)
 mov HV_FAST_PCI_CONFIG_GET, %o5
 ta HV_FAST_TRAP
 brnz,a,pn %o1, 1f
  mov -1, %o2
1: retl
  mov %o2, %o0
ENDPROC(pci_sun4v_config_get)

 /* %o0: devhandle
 * %o1: pci_device
 * %o2: pci_config_offset
 * %o3: size
 * %o4: data
 *
 * returns %o0: status
 *
 * status will be zero if the operation completed
 * successfully, else -1 if not
 */

ENTRY(pci_sun4v_config_put)
 mov HV_FAST_PCI_CONFIG_PUT, %o5
 ta HV_FAST_TRAP
 brnz,a,pn %o1, 1f
  mov -1, %o1
1: retl
  mov %o1, %o0
ENDPROC(pci_sun4v_config_put)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: msiq phys address
 * %o3: num entries
 *
 * returns %o0: status
 *
 * status will be zero if the operation completed
 * successfully, else -1 if not
 */

ENTRY(pci_sun4v_msiq_conf)
 mov HV_FAST_PCI_MSIQ_CONF, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_conf)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: &msiq_phys_addr
 * %o3: &msiq_num_entries
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_info)
 mov %o2, %o4
 mov HV_FAST_PCI_MSIQ_INFO, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o4]
 stx %o2, [%o3]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_info)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: &valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_getvalid)
 mov HV_FAST_PCI_MSIQ_GETVALID, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_getvalid)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_setvalid)
 mov HV_FAST_PCI_MSIQ_SETVALID, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_setvalid)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: &state
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_getstate)
 mov HV_FAST_PCI_MSIQ_GETSTATE, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_getstate)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: state
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_setstate)
 mov HV_FAST_PCI_MSIQ_SETSTATE, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_setstate)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: &head
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_gethead)
 mov HV_FAST_PCI_MSIQ_GETHEAD, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_gethead)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: head
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_sethead)
 mov HV_FAST_PCI_MSIQ_SETHEAD, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_sethead)

 /* %o0: devhandle
 * %o1: msiqid
 * %o2: &tail
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msiq_gettail)
 mov HV_FAST_PCI_MSIQ_GETTAIL, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msiq_gettail)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: &valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_getvalid)
 mov HV_FAST_PCI_MSI_GETVALID, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_getvalid)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_setvalid)
 mov HV_FAST_PCI_MSI_SETVALID, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_setvalid)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: &msiq
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_getmsiq)
 mov HV_FAST_PCI_MSI_GETMSIQ, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_getmsiq)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: msitype
 * %o3: msiq
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_setmsiq)
 mov HV_FAST_PCI_MSI_SETMSIQ, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_setmsiq)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: &state
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_getstate)
 mov HV_FAST_PCI_MSI_GETSTATE, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_getstate)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: state
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msi_setstate)
 mov HV_FAST_PCI_MSI_SETSTATE, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msi_setstate)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: &msiq
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msg_getmsiq)
 mov HV_FAST_PCI_MSG_GETMSIQ, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msg_getmsiq)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: msiq
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msg_setmsiq)
 mov HV_FAST_PCI_MSG_SETMSIQ, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msg_setmsiq)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: &valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msg_getvalid)
 mov HV_FAST_PCI_MSG_GETVALID, %o5
 ta HV_FAST_TRAP
 stx %o1, [%o2]
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msg_getvalid)

 /* %o0: devhandle
 * %o1: msinum
 * %o2: valid
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_msg_setvalid)
 mov HV_FAST_PCI_MSG_SETVALID, %o5
 ta HV_FAST_TRAP
 retl
  mov %o0, %o0
ENDPROC(pci_sun4v_msg_setvalid)

 /*
 * %o0: devhandle
 * %o1: r_addr
 * %o2: size
 * %o3: pagesize
 * %o4: virt
 * %o5: &iotsb_num/&iotsb_handle
 *
 * returns %o0: status
 *         %o1: iotsb_num/iotsb_handle
 */

ENTRY(pci_sun4v_iotsb_conf)
 mov %o5, %g1
 mov HV_FAST_PCI_IOTSB_CONF, %o5
 ta HV_FAST_TRAP
 retl
  stx %o1, [%g1]
ENDPROC(pci_sun4v_iotsb_conf)

 /*
 * %o0: devhandle
 * %o1: iotsb_num/iotsb_handle
 * %o2: pci_device
 *
 * returns %o0: status
 */

ENTRY(pci_sun4v_iotsb_bind)
 mov HV_FAST_PCI_IOTSB_BIND, %o5
 ta HV_FAST_TRAP
 retl
  nop
ENDPROC(pci_sun4v_iotsb_bind)

 /*
 * %o0: devhandle
 * %o1: iotsb_num/iotsb_handle
 * %o2: index_count
 * %o3: iotte_attributes
 * %o4: io_page_list_p
 * %o5: &mapped
 *
 * returns %o0: status
 *         %o1: #mapped
 */

ENTRY(pci_sun4v_iotsb_map)
 mov %o5, %g1
 mov HV_FAST_PCI_IOTSB_MAP, %o5
 ta HV_FAST_TRAP
 retl
  stx %o1, [%g1]
ENDPROC(pci_sun4v_iotsb_map)

 /*
 * %o0: devhandle
 * %o1: iotsb_num/iotsb_handle
 * %o2: iotsb_index
 * %o3: #iottes
 * %o4: &demapped
 *
 * returns %o0: status
 *         %o1: #demapped
 */

ENTRY(pci_sun4v_iotsb_demap)
 mov HV_FAST_PCI_IOTSB_DEMAP, %o5
 ta HV_FAST_TRAP
 retl
  stx %o1, [%o4]
ENDPROC(pci_sun4v_iotsb_demap)

Messung V0.5
C=91 H=92 G=91

¤ Dauer der Verarbeitung: 0.2 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.