Annotation of embedaddon/pciutils/lib/i386-io-haiku.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     The PCI Library -- Access to i386 I/O ports on Haiku
        !             3:  *
        !             4:  *     Copyright (c) 2009 Francois Revol <revol@free.fr>
        !             5:  *
        !             6:  *     Can be freely distributed and used under the terms of the GNU GPL.
        !             7:  */
        !             8: 
        !             9: #include <Drivers.h>
        !            10: #include <ISA.h>
        !            11: #include <PCI.h>
        !            12: 
        !            13: /* from haiku/trunk/headers/private/drivers/poke.h */
        !            14: 
        !            15: #define POKE_DEVICE_NAME                "poke"
        !            16: #define POKE_DEVICE_FULLNAME    "/dev/misc/poke"
        !            17: #define POKE_SIGNATURE                  'wltp'  // "We Like To Poke"
        !            18: 
        !            19: enum {
        !            20:        POKE_PORT_READ = B_DEVICE_OP_CODES_END + 1,
        !            21:        POKE_PORT_WRITE,
        !            22:        POKE_PORT_INDEXED_READ,
        !            23:        POKE_PORT_INDEXED_WRITE,
        !            24:        POKE_PCI_READ_CONFIG,
        !            25:        POKE_PCI_WRITE_CONFIG,
        !            26:        POKE_GET_NTH_PCI_INFO,
        !            27:        POKE_GET_PHYSICAL_ADDRESS,
        !            28:        POKE_MAP_MEMORY,
        !            29:        POKE_UNMAP_MEMORY
        !            30: };
        !            31: 
        !            32: 
        !            33: typedef struct {
        !            34:        uint32          signature;
        !            35:        uint8           index;
        !            36:        pci_info*       info;
        !            37:        status_t        status;
        !            38: } pci_info_args;
        !            39: 
        !            40: 
        !            41: typedef struct {
        !            42:        uint32  signature;
        !            43:        uint16  port;
        !            44:        uint8   size;           // == index for POKE_PORT_INDEXED_*
        !            45:        uint32  value;
        !            46: } port_io_args;
        !            47: 
        !            48: 
        !            49: typedef struct {
        !            50:        uint32  signature;
        !            51:        uint8   bus;
        !            52:        uint8   device;
        !            53:        uint8   function;
        !            54:        uint8   size;
        !            55:        uint8   offset;
        !            56:        uint32  value;
        !            57: } pci_io_args;
        !            58: 
        !            59: 
        !            60: /* en poke.h*/
        !            61: 
        !            62: static int poke_driver_fd;
        !            63: 
        !            64: static int
        !            65: intel_setup_io(struct pci_access *a UNUSED)
        !            66: {
        !            67:   poke_driver_fd = open(POKE_DEVICE_FULLNAME, O_RDWR);
        !            68:   return (poke_driver_fd < 0) ? 0 : 1;
        !            69: }
        !            70: 
        !            71: static inline int
        !            72: intel_cleanup_io(struct pci_access *a UNUSED)
        !            73: {
        !            74:   close(poke_driver_fd);
        !            75:   return 1;
        !            76: }
        !            77: 
        !            78: static inline u8
        !            79: inb (u16 port)
        !            80: {
        !            81:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u8), 0 };
        !            82:   if (ioctl(poke_driver_fd, POKE_PORT_READ, &args, sizeof(args)) < 0)
        !            83:     return 0;
        !            84:   return (u8)args.value;
        !            85: }
        !            86: 
        !            87: static inline u16
        !            88: inw (u16 port)
        !            89: {
        !            90:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u16), 0 };
        !            91:   if (ioctl(poke_driver_fd, POKE_PORT_READ, &args, sizeof(args)) < 0)
        !            92:     return 0;
        !            93:   return (u16)args.value;
        !            94: }
        !            95: 
        !            96: static inline u32
        !            97: inl (u16 port)
        !            98: {
        !            99:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u32), 0 };
        !           100:   if (ioctl(poke_driver_fd, POKE_PORT_READ, &args, sizeof(args)) < 0)
        !           101:     return 0;
        !           102:   return (u32)args.value;
        !           103: }
        !           104: 
        !           105: static inline void
        !           106: outb (u8 value, u16 port)
        !           107: {
        !           108:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u8), value };
        !           109:   ioctl(poke_driver_fd, POKE_PORT_WRITE, &args, sizeof(args));
        !           110: }
        !           111: 
        !           112: static inline void
        !           113: outw (u16 value, u16 port)
        !           114: {
        !           115:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u16), value };
        !           116:   ioctl(poke_driver_fd, POKE_PORT_WRITE, &args, sizeof(args));
        !           117: }
        !           118: 
        !           119: static inline void
        !           120: outl (u32 value, u16 port)
        !           121: {
        !           122:   port_io_args args = { POKE_SIGNATURE, port, sizeof(u32), value };
        !           123:   ioctl(poke_driver_fd, POKE_PORT_WRITE, &args, sizeof(args));
        !           124: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>