Index: dev/octeon_pcibus.c =================================================================== RCS file: /cvs/src/sys/arch/octeon/dev/octeon_pcibus.c,v retrieving revision 1.16 diff -u -p -r1.16 octeon_pcibus.c --- dev/octeon_pcibus.c 11 Aug 2014 19:00:50 -0000 1.16 +++ dev/octeon_pcibus.c 4 May 2015 14:50:29 -0000 @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -133,6 +134,19 @@ int octeon_pcibus_io_map(bus_space_tag_t int octeon_pcibus_mem_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, bus_space_handle_t *); +uint8_t octeon_pcibus_read_1(bus_space_tag_t, bus_space_handle_t, bus_size_t); +uint16_t octeon_pcibus_read_2(bus_space_tag_t, bus_space_handle_t, bus_size_t); +uint32_t octeon_pcibus_read_4(bus_space_tag_t, bus_space_handle_t, bus_size_t); +uint64_t octeon_pcibus_read_8(bus_space_tag_t, bus_space_handle_t, bus_size_t); +void octeon_pcibus_write_1(bus_space_tag_t, bus_space_handle_t, bus_size_t, + uint8_t); +void octeon_pcibus_write_2(bus_space_tag_t, bus_space_handle_t, bus_size_t, + uint16_t); +void octeon_pcibus_write_4(bus_space_tag_t, bus_space_handle_t, bus_size_t, + uint32_t); +void octeon_pcibus_write_8(bus_space_tag_t, bus_space_handle_t, bus_size_t, + uint64_t); + #define _OCTEON_PCIBUS_PCIIO_BASE 0x00001000 #define _OCTEON_PCIBUS_PCIIO_SIZE 0x08000000 #define _OCTEON_PCIBUS_PCIMEM_BASE 0x80000000 @@ -141,14 +155,14 @@ int octeon_pcibus_mem_map(bus_space_tag_ struct mips_bus_space octeon_pcibus_pci_io_space_tag = { .bus_base = PHYS_TO_XKPHYS(_OCTEON_PCIBUS_PCIIO_BASE, CCA_NC), .bus_private = NULL, - ._space_read_1 = generic_space_read_1, - ._space_write_1 = generic_space_write_1, - ._space_read_2 = generic_space_read_2, - ._space_write_2 = generic_space_write_2, - ._space_read_4 = generic_space_read_4, - ._space_write_4 = generic_space_write_4, - ._space_read_8 = generic_space_read_8, - ._space_write_8 = generic_space_write_8, + ._space_read_1 = octeon_pcibus_read_1, + ._space_write_1 = octeon_pcibus_write_1, + ._space_read_2 = octeon_pcibus_read_2, + ._space_write_2 = octeon_pcibus_write_2, + ._space_read_4 = octeon_pcibus_read_4, + ._space_write_4 = octeon_pcibus_write_4, + ._space_read_8 = octeon_pcibus_read_8, + ._space_write_8 = octeon_pcibus_write_8, ._space_read_raw_2 = generic_space_read_raw_2, ._space_write_raw_2 = generic_space_write_raw_2, ._space_read_raw_4 = generic_space_read_raw_4, @@ -164,14 +178,14 @@ struct mips_bus_space octeon_pcibus_pci_ struct mips_bus_space octeon_pcibus_pci_mem_space_tag = { .bus_base = PHYS_TO_XKPHYS(_OCTEON_PCIBUS_PCIMEM_BASE, CCA_NC), .bus_private = NULL, - ._space_read_1 = generic_space_read_1, - ._space_write_1 = generic_space_write_1, - ._space_read_2 = generic_space_read_2, - ._space_write_2 = generic_space_write_2, - ._space_read_4 = generic_space_read_4, - ._space_write_4 = generic_space_write_4, - ._space_read_8 = generic_space_read_8, - ._space_write_8 = generic_space_write_8, + ._space_read_1 = octeon_pcibus_read_1, + ._space_write_1 = octeon_pcibus_write_1, + ._space_read_2 = octeon_pcibus_read_2, + ._space_write_2 = octeon_pcibus_write_2, + ._space_read_4 = octeon_pcibus_read_4, + ._space_write_4 = octeon_pcibus_write_4, + ._space_read_8 = octeon_pcibus_read_8, + ._space_write_8 = octeon_pcibus_write_8, ._space_read_raw_2 = generic_space_read_raw_2, ._space_write_raw_2 = generic_space_write_raw_2, ._space_read_raw_4 = generic_space_read_raw_4, @@ -430,8 +444,61 @@ octeon_pcibus_pci_intr_disestablish(void } /* - * bus_space mapping routines. + * bus_space routines. */ + +uint8_t +octeon_pcibus_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) +{ + return *(volatile uint8_t *)(h + o); +} + +uint16_t +octeon_pcibus_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) +{ + return lemtoh16((volatile uint16_t *)(h + o)); +} + +uint32_t +octeon_pcibus_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) +{ + return lemtoh32((volatile uint32_t *)(h + o)); +} + +uint64_t +octeon_pcibus_read_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o) +{ + return lemtoh64((volatile uint64_t *)(h + o)); +} + +void +octeon_pcibus_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint8_t v) +{ + *(volatile uint8_t *)(h + o) = v; +} + +void +octeon_pcibus_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint16_t v) +{ + htolem16((volatile uint16_t *)(h + o), v); +} + +void +octeon_pcibus_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint32_t v) +{ + htolem32((volatile uint32_t *)(h + o), v); +} + +void +octeon_pcibus_write_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint64_t v) +{ + htolem64((volatile uint64_t *)(h + o), v); +} + int octeon_pcibus_io_map(bus_space_tag_t t, bus_addr_t offs, bus_size_t size, int flags, bus_space_handle_t *bshp)