--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:17 by OpenVMS SDL EV3-3 -- Source: 14-DEC-2006 17:37:48 $1$DGA8085:[LIB_ADA.LIS]BUSARRAYDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; with CBBDEF;use CBBDEF; package BUSARRAYDEF is -- module $BUSARRAYDEF --+ -- Bus Array -- each node on a bus has an entry in the Bus Array for that bus. -- -- A Bus Array is pointed to by a field in the ADP. A Bus Array consists -- of a header and a number of entries (one for each node on the bus or one -- for each channel on an adapter). -- Each entry contains info on the node, such as hardware id, base CSR -- address, a pointer to a data structure, and node number. -- --- -- Define Bus Array Entry -- ================================================================ -- BUSARRAYENTRY -- ================================================================ -- Characterizes hardware connected to the bus adapter represented -- by the ADP. The Bus Array is comprised of a number of these -- BUSARRAYENTRYs, one for each node on the bus. -- BUSARRAY_M_NO_RECONNECT : constant := 16#00000001#; BUSARRAY_M_MSI : constant := 16#00000002#; BUSARRAY_M_INVALID_BAE : constant := 16#00000004#; BUSARRAY_M_SPAREBIT03 : constant := 16#00000008#; BUSARRAY_M_MULTI : constant := 16#00000010#; BUSARRAY_M_CHANNEL : constant := 16#00000020#; BUSARRAY_M_PCI_BRIDGE : constant := 16#00000040#; BUSARRAY_M_NO_DRIVER : constant := 16#00000080#; BUSARRAY_M_INT_ENABLED : constant := 16#00000100#; type BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE is record PCI_DEV_VEND_ID : UNSIGNED_LONGWORD; -- Device & Vendor ID PCI_SUBSYS_VEND_ID : UNSIGNED_LONGWORD; -- Subsystem Vendor & subsys ID end record; for BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE use record PCI_DEV_VEND_ID at 0 range 0 .. 31; PCI_SUBSYS_VEND_ID at 4 range 0 .. 31; end record; for BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE'SIZE use 64; BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE_INIT : constant BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE := (PCI_DEV_VEND_ID => 0, PCI_SUBSYS_VEND_ID => 0); type BUSARRAY_HW_ID_TYPE is -- Hardware ID. record PCI_VEND_ID : UNSIGNED_WORD; -- Vendor ID PCI_DEV_ID : UNSIGNED_WORD; -- Device ID PCI_SUBVEND_ID : UNSIGNED_WORD; -- Subsytem Vendor ID PCI_SUBSYS_ID : UNSIGNED_WORD; -- Subsystem (Device) ID ----Component(s) below are defined as comments since they ----overlap other fields ---- ----PCI_HW_LWORD_FIELDS : BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE; end record; for BUSARRAY_HW_ID_TYPE use record PCI_VEND_ID at 0 range 0 .. 15; PCI_DEV_ID at 2 range 0 .. 15; PCI_SUBVEND_ID at 4 range 0 .. 15; PCI_SUBSYS_ID at 6 range 0 .. 15; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----PCI_HW_LWORD_FIELDS at 0 range 0 .. 63; end record; for BUSARRAY_HW_ID_TYPE'SIZE use 64; BUSARRAY_HW_ID_TYPE_INIT : constant BUSARRAY_HW_ID_TYPE := (PCI_VEND_ID => 0, PCI_DEV_ID => 0, PCI_SUBVEND_ID => 0, PCI_SUBSYS_ID => 0); type BUSARRAY_NODE_NUMBER_TYPE is record NODE_NUMBER_L : INTEGER_32; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----NODE_NUMBER : INTEGER_32; NODE_NUMBER_H : INTEGER_32; end record; for BUSARRAY_NODE_NUMBER_TYPE use record NODE_NUMBER_L at 16 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----NODE_NUMBER at 16 range 0 .. 31; NODE_NUMBER_H at 4 range 0 .. 31; end record; for BUSARRAY_NODE_NUMBER_TYPE'SIZE use 64; BUSARRAY_NODE_NUMBER_TYPE_INIT : constant BUSARRAY_NODE_NUMBER_TYPE := ( NODE_NUMBER_L => 0, NODE_NUMBER_H => 0); type BUSARRAY_FLAGS_TYPE is -- Flags record NO_RECONNECT : BOOLEAN; MSI : BOOLEAN; -- PCI 2.2 & PCIX message signaled interrupts. INVALID_BAE : BOOLEAN; -- Invalid BAE - ignore. SPAREBIT03 : BOOLEAN; -- A named bit for future needs. MULTI : BOOLEAN; -- multi-function or multi-channel device CHANNEL : BOOLEAN; -- This BUSARRAYENTRY is a channel PCI_BRIDGE : BOOLEAN; -- PCI-PCI Bridge device NO_DRIVER : BOOLEAN; -- No entry in SYS$CONFIG.DAT INT_ENABLED : BOOLEAN; FILLER_1 : UNSIGNED_23; end record; for BUSARRAY_FLAGS_TYPE use record NO_RECONNECT at 0 range 0 .. 0; MSI at 0 range 1 .. 1; INVALID_BAE at 0 range 2 .. 2; SPAREBIT03 at 0 range 3 .. 3; MULTI at 0 range 4 .. 4; CHANNEL at 0 range 5 .. 5; PCI_BRIDGE at 0 range 6 .. 6; NO_DRIVER at 0 range 7 .. 7; INT_ENABLED at 1 range 0 .. 0; FILLER_1 at 1 range 1 .. 23; end record; for BUSARRAY_FLAGS_TYPE'SIZE use 32; BUSARRAY_FLAGS_TYPE_INIT : constant BUSARRAY_FLAGS_TYPE := (NO_RECONNECT => FALSE, MSI => FALSE, INVALID_BAE => FALSE, SPAREBIT03 => FALSE, MULTI => FALSE, CHANNEL => FALSE, PCI_BRIDGE => FALSE, NO_DRIVER => FALSE, INT_ENABLED => FALSE, FILLER_1 => 0); type BUSARRAY_BUS_SPECIFIC_TYPE is record BUS_SPECIFIC_L : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_L : ADDRESS; ----INT_VEC : UNSIGNED_LONGWORD; -- Offset into SCB or vector table ----SYS_IRQ : UNSIGNED_LONGWORD; -- System IRQ (4*SYS_IRQ = vector table offset) ----SCB_OFFSET : UNSIGNED_LONGWORD; -- Offset into the SCB BUS_SPECIFIC_H : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_H : ADDRESS; ----BUS_SPECIFIC_1 : UNSIGNED_LONGWORD; ----BUS_SPECIFIC_1 : ADDRESS; end record; for BUSARRAY_BUS_SPECIFIC_TYPE use record BUS_SPECIFIC_L at 48 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_L at 48 range 0 .. 31; ----INT_VEC at 48 range 0 .. 31; ----SYS_IRQ at 48 range 0 .. 31; ----SCB_OFFSET at 48 range 0 .. 31; BUS_SPECIFIC_H at 52 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_H at 52 range 0 .. 31; ----BUS_SPECIFIC_1 at 52 range 0 .. 31; ----BUS_SPECIFIC_1 at 52 range 0 .. 31; end record; for BUSARRAY_BUS_SPECIFIC_TYPE'SIZE use 64; BUSARRAY_BUS_SPECIFIC_TYPE_INIT : constant BUSARRAY_BUS_SPECIFIC_TYPE := ( BUS_SPECIFIC_L => 0, BUS_SPECIFIC_H => 0 ); type BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE is record FILLER_1 : UNSIGNED_QUADWORD_ARRAY (1 .. 6); CPU_AFFINITY : UNSIGNED_QUADWORD; -- Identifies CPU the device is interrupting on ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CPU_AFFINITY : UNSIGNED_LONGWORD; -- Identifies CPU the device is interrupting on FILLER_2 : UNSIGNED_QUADWORD_ARRAY (1 .. 15); ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CBB_CPU_AFFINITY : CBB_TYPE; -- Embedded CBB block end record; for BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE use record FILLER_1 at 0 range 0 .. 383; CPU_AFFINITY at 112 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CPU_AFFINITY at 112 range 0 .. 31; FILLER_2 at 56 range 0 .. 959; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CBB_CPU_AFFINITY at 0 range 0 .. 383; end record; for BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE'SIZE use 1408; BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE_INIT : constant BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE := (FILLER_1 => (others => (0, 0)), CPU_AFFINITY => (0, 0), FILLER_2 => (others => (0, 0))); type BUSARRAYENTRY_TYPE is record HW_ID : BUSARRAY_HW_ID_TYPE; -- Hardware ID. CSR : UNSIGNED_QUADWORD; -- Base CSR address NODE_NUMBER : BUSARRAY_NODE_NUMBER_TYPE; FLAGS : BUSARRAY_FLAGS_TYPE; -- Flags CRB : ADDRESS; -- Pointer to Channel Request Block ADP : ADDRESS; -- Pointer to subordinate ADP AUTOCONFIG : UNSIGNED_LONGWORD; -- Reserved for Autoconfigure ----Component(s) below are defined as comments since they ----overlap other fields ---- ----AUTOCONFIG : ADDRESS; -- Reserved for Autoconfigure CTRLLTR : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CTRLLTR : UNSIGNED_BYTE; -- Make sure the following quadword stays aligned properly FILLER_1 : UNSIGNED_BYTE_ARRAY (0 .. 3); BUS_SPECIFIC : BUSARRAY_BUS_SPECIFIC_TYPE; BUS_SPECIFIC_2 : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_2 : ADDRESS; ----BAX : ADDRESS; FILLER_2 : UNSIGNED_BYTE_ARRAY (0 .. 3); CBB_CPU_AFFINITY_OVERLAY : BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE; FILLER_3 : UNSIGNED_BYTE_ARRAY (1 .. 0); -- Insure quadword alignment. end record; for BUSARRAYENTRY_TYPE use record HW_ID at 0 range 0 .. 63; CSR at 8 range 0 .. 63; NODE_NUMBER at 16 range 0 .. 63; FLAGS at 24 range 0 .. 31; CRB at 28 range 0 .. 31; ADP at 32 range 0 .. 31; AUTOCONFIG at 36 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----AUTOCONFIG at 36 range 0 .. 31; CTRLLTR at 40 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CTRLLTR at 40 range 0 .. 7; FILLER_1 at 44 range 0 .. 31; BUS_SPECIFIC at 48 range 0 .. 63; BUS_SPECIFIC_2 at 56 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_2 at 56 range 0 .. 31; ----BAX at 56 range 0 .. 31; FILLER_2 at 60 range 0 .. 31; CBB_CPU_AFFINITY_OVERLAY at 64 range 0 .. 1407; FILLER_3 at 240 range 0 .. -1; end record; for BUSARRAYENTRY_TYPE'SIZE use 1920; BUSARRAYENTRY_TYPE_INIT : constant BUSARRAYENTRY_TYPE := ( HW_ID => BUSARRAY_HW_ID_TYPE_INIT, CSR => (0, 0), NODE_NUMBER => BUSARRAY_NODE_NUMBER_TYPE_INIT, FLAGS => BUSARRAY_FLAGS_TYPE_INIT, CRB => ADDRESS_ZERO, ADP => ADDRESS_ZERO, AUTOCONFIG => 0, CTRLLTR => 0, FILLER_1 => (others => 0), BUS_SPECIFIC => BUSARRAY_BUS_SPECIFIC_TYPE_INIT, BUS_SPECIFIC_2 => 0, FILLER_2 => (others => 0), CBB_CPU_AFFINITY_OVERLAY => BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE_INIT, FILLER_3 => (others => 0)); BUSARRAYENTRY_K_LENGTH : constant := 240; -- ================================================================ -- BUSARRAY_HEADER -- ================================================================ -- Descriptor for the Bus Array hanging off the ADP. -- BUSARRAYHEADER_K_LENGTH : constant := 24; -- Keep length before ENTRY_LIST, which has no real -- length BUSARRAY_S_BUSARRAYHEADER : constant := 24; -- Old size name type BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE is record PCI_DEV_VEND_ID : UNSIGNED_LONGWORD; -- Device & Vendor ID PCI_SUBSYS_VEND_ID : UNSIGNED_LONGWORD; -- Subsystem Vendor & subsys ID end record; for BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE use record PCI_DEV_VEND_ID at 0 range 0 .. 31; PCI_SUBSYS_VEND_ID at 4 range 0 .. 31; end record; for BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE'SIZE use 64; BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE_INIT : constant BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE := (PCI_DEV_VEND_ID => 0, PCI_SUBSYS_VEND_ID => 0); type BUSARRAY_HW_ID_TYPE is -- Hardware ID. record PCI_VEND_ID : UNSIGNED_WORD; -- Vendor ID PCI_DEV_ID : UNSIGNED_WORD; -- Device ID PCI_SUBVEND_ID : UNSIGNED_WORD; -- Subsytem Vendor ID PCI_SUBSYS_ID : UNSIGNED_WORD; -- Subsystem (Device) ID ----Component(s) below are defined as comments since they ----overlap other fields ---- ----PCI_HW_LWORD_FIELDS : BUSARRAY_PCI_HW_LWORD_FIELDS_TYPE; end record; for BUSARRAY_HW_ID_TYPE use record PCI_VEND_ID at 0 range 0 .. 15; PCI_DEV_ID at 2 range 0 .. 15; PCI_SUBVEND_ID at 4 range 0 .. 15; PCI_SUBSYS_ID at 6 range 0 .. 15; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----PCI_HW_LWORD_FIELDS at 0 range 0 .. 63; end record; for BUSARRAY_HW_ID_TYPE'SIZE use 64; BUSARRAY_HW_ID_TYPE_INIT : constant BUSARRAY_HW_ID_TYPE := (PCI_VEND_ID => 0, PCI_DEV_ID => 0, PCI_SUBVEND_ID => 0, PCI_SUBSYS_ID => 0); type BUSARRAY_NODE_NUMBER_TYPE is record NODE_NUMBER_L : INTEGER_32; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----NODE_NUMBER : INTEGER_32; NODE_NUMBER_H : INTEGER_32; end record; for BUSARRAY_NODE_NUMBER_TYPE use record NODE_NUMBER_L at 16 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----NODE_NUMBER at 16 range 0 .. 31; NODE_NUMBER_H at 4 range 0 .. 31; end record; for BUSARRAY_NODE_NUMBER_TYPE'SIZE use 64; BUSARRAY_NODE_NUMBER_TYPE_INIT : constant BUSARRAY_NODE_NUMBER_TYPE := ( NODE_NUMBER_L => 0, NODE_NUMBER_H => 0); type BUSARRAY_FLAGS_TYPE is -- Flags record NO_RECONNECT : BOOLEAN; MSI : BOOLEAN; -- PCI 2.2 & PCIX message signaled interrupts. INVALID_BAE : BOOLEAN; -- Invalid BAE - ignore. SPAREBIT03 : BOOLEAN; -- A named bit for future needs. MULTI : BOOLEAN; -- multi-function or multi-channel device CHANNEL : BOOLEAN; -- This BUSARRAYENTRY is a channel PCI_BRIDGE : BOOLEAN; -- PCI-PCI Bridge device NO_DRIVER : BOOLEAN; -- No entry in SYS$CONFIG.DAT INT_ENABLED : BOOLEAN; FILLER_1 : UNSIGNED_23; end record; for BUSARRAY_FLAGS_TYPE use record NO_RECONNECT at 0 range 0 .. 0; MSI at 0 range 1 .. 1; INVALID_BAE at 0 range 2 .. 2; SPAREBIT03 at 0 range 3 .. 3; MULTI at 0 range 4 .. 4; CHANNEL at 0 range 5 .. 5; PCI_BRIDGE at 0 range 6 .. 6; NO_DRIVER at 0 range 7 .. 7; INT_ENABLED at 1 range 0 .. 0; FILLER_1 at 1 range 1 .. 23; end record; for BUSARRAY_FLAGS_TYPE'SIZE use 32; BUSARRAY_FLAGS_TYPE_INIT : constant BUSARRAY_FLAGS_TYPE := (NO_RECONNECT => FALSE, MSI => FALSE, INVALID_BAE => FALSE, SPAREBIT03 => FALSE, MULTI => FALSE, CHANNEL => FALSE, PCI_BRIDGE => FALSE, NO_DRIVER => FALSE, INT_ENABLED => FALSE, FILLER_1 => 0); type BUSARRAY_BUS_SPECIFIC_TYPE is record BUS_SPECIFIC_L : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_L : ADDRESS; ----INT_VEC : UNSIGNED_LONGWORD; -- Offset into SCB or vector table ----SYS_IRQ : UNSIGNED_LONGWORD; -- System IRQ (4*SYS_IRQ = vector table offset) ----SCB_OFFSET : UNSIGNED_LONGWORD; -- Offset into the SCB BUS_SPECIFIC_H : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_H : ADDRESS; ----BUS_SPECIFIC_1 : UNSIGNED_LONGWORD; ----BUS_SPECIFIC_1 : ADDRESS; end record; for BUSARRAY_BUS_SPECIFIC_TYPE use record BUS_SPECIFIC_L at 48 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_L at 48 range 0 .. 31; ----INT_VEC at 48 range 0 .. 31; ----SYS_IRQ at 48 range 0 .. 31; ----SCB_OFFSET at 48 range 0 .. 31; BUS_SPECIFIC_H at 52 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_H at 52 range 0 .. 31; ----BUS_SPECIFIC_1 at 52 range 0 .. 31; ----BUS_SPECIFIC_1 at 52 range 0 .. 31; end record; for BUSARRAY_BUS_SPECIFIC_TYPE'SIZE use 64; BUSARRAY_BUS_SPECIFIC_TYPE_INIT : constant BUSARRAY_BUS_SPECIFIC_TYPE := ( BUS_SPECIFIC_L => 0, BUS_SPECIFIC_H => 0 ); type BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE is record FILLER_1 : UNSIGNED_QUADWORD_ARRAY (1 .. 6); CPU_AFFINITY : UNSIGNED_QUADWORD; -- Identifies CPU the device is interrupting on ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CPU_AFFINITY : UNSIGNED_LONGWORD; -- Identifies CPU the device is interrupting on FILLER_2 : UNSIGNED_QUADWORD_ARRAY (1 .. 15); ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CBB_CPU_AFFINITY : CBB_TYPE; -- Embedded CBB block end record; for BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE use record FILLER_1 at 0 range 0 .. 383; CPU_AFFINITY at 112 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CPU_AFFINITY at 112 range 0 .. 31; FILLER_2 at 56 range 0 .. 959; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CBB_CPU_AFFINITY at 0 range 0 .. 383; end record; for BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE'SIZE use 1408; BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE_INIT : constant BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE := (FILLER_1 => (others => (0, 0)), CPU_AFFINITY => (0, 0), FILLER_2 => (others => (0, 0))); type BUSARRAY_BAE_OVERLAY_TYPE is record HW_ID : BUSARRAY_HW_ID_TYPE; -- Hardware ID. CSR : UNSIGNED_QUADWORD; -- Base CSR address NODE_NUMBER : BUSARRAY_NODE_NUMBER_TYPE; FLAGS : BUSARRAY_FLAGS_TYPE; -- Flags CRB : ADDRESS; -- Pointer to Channel Request Block ADP : ADDRESS; -- Pointer to subordinate ADP AUTOCONFIG : UNSIGNED_LONGWORD; -- Reserved for Autoconfigure ----Component(s) below are defined as comments since they ----overlap other fields ---- ----AUTOCONFIG : ADDRESS; -- Reserved for Autoconfigure CTRLLTR : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CTRLLTR : UNSIGNED_BYTE; -- Make sure the following quadword stays aligned properly FILLER_1 : UNSIGNED_BYTE_ARRAY (0 .. 3); BUS_SPECIFIC : BUSARRAY_BUS_SPECIFIC_TYPE; BUS_SPECIFIC_2 : UNSIGNED_LONGWORD; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_SPECIFIC_2 : ADDRESS; ----BAX : ADDRESS; FILLER_2 : UNSIGNED_BYTE_ARRAY (0 .. 3); CBB_CPU_AFFINITY_OVERLAY : BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE; FILLER_3 : UNSIGNED_BYTE_ARRAY (1 .. 0); -- Insure quadword alignment. ----Component(s) below are defined as comments since they ----overlap other fields ---- ----ENTRY_LIST : UNSIGNED_QUADWORD_ARRAY (1 .. 1); -- Bus Array entries start -- at entry_list end record; for BUSARRAY_BAE_OVERLAY_TYPE use record HW_ID at 0 range 0 .. 63; CSR at 8 range 0 .. 63; NODE_NUMBER at 16 range 0 .. 63; FLAGS at 24 range 0 .. 31; CRB at 28 range 0 .. 31; ADP at 32 range 0 .. 31; AUTOCONFIG at 36 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----AUTOCONFIG at 36 range 0 .. 31; CTRLLTR at 40 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CTRLLTR at 40 range 0 .. 7; FILLER_1 at 44 range 0 .. 31; BUS_SPECIFIC at 48 range 0 .. 63; BUS_SPECIFIC_2 at 56 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_SPECIFIC_2 at 56 range 0 .. 31; ----BAX at 56 range 0 .. 31; FILLER_2 at 60 range 0 .. 31; CBB_CPU_AFFINITY_OVERLAY at 64 range 0 .. 1407; FILLER_3 at 240 range 0 .. -1; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----ENTRY_LIST at 24 range 0 .. 63; end record; for BUSARRAY_BAE_OVERLAY_TYPE'SIZE use 1920; BUSARRAY_BAE_OVERLAY_TYPE_INIT : constant BUSARRAY_BAE_OVERLAY_TYPE := ( HW_ID => BUSARRAY_HW_ID_TYPE_INIT, CSR => (0, 0), NODE_NUMBER => BUSARRAY_NODE_NUMBER_TYPE_INIT, FLAGS => BUSARRAY_FLAGS_TYPE_INIT, CRB => ADDRESS_ZERO, ADP => ADDRESS_ZERO, AUTOCONFIG => 0, CTRLLTR => 0, FILLER_1 => (others => 0), BUS_SPECIFIC => BUSARRAY_BUS_SPECIFIC_TYPE_INIT, BUS_SPECIFIC_2 => 0, FILLER_2 => (others => 0), CBB_CPU_AFFINITY_OVERLAY => BUSARRAY_CBB_CPU_AFFINITY_OVERLAY_TYPE_INIT, FILLER_3 => (others => 0)); type BUSARRAY_HEADER_TYPE is record PARENT_ADP : ADDRESS; -- Point back to ADP FILLER_1 : UNSIGNED_LONGWORD; -- SIZE : UNSIGNED_WORD; -- Structure size in bytes TYP : UNSIGNED_BYTE; -- Structure type SUBTYP : UNSIGNED_BYTE; -- Structure subtype BUS_TYPE : UNSIGNED_LONGWORD; -- Bus Type code BUS_NODE_CNT : UNSIGNED_LONGWORD; -- Number of entries in Bus Array FILLER_2 : UNSIGNED_LONGWORD; -- Fill to quadword boundary BAE_OVERLAY : BUSARRAY_BAE_OVERLAY_TYPE; end record; for BUSARRAY_HEADER_TYPE use record PARENT_ADP at 0 range 0 .. 31; FILLER_1 at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; BUS_TYPE at 12 range 0 .. 31; BUS_NODE_CNT at 16 range 0 .. 31; FILLER_2 at 20 range 0 .. 31; BAE_OVERLAY at 24 range 0 .. 1919; end record; for BUSARRAY_HEADER_TYPE'SIZE use 2112; BUSARRAY_HEADER_TYPE_INIT : constant BUSARRAY_HEADER_TYPE := (PARENT_ADP => ADDRESS_ZERO, FILLER_1 => 0, SIZE => 0, TYP => 0, SUBTYP => 0, BUS_TYPE => 0, BUS_NODE_CNT => 0, FILLER_2 => 0, BAE_OVERLAY => BUSARRAY_BAE_OVERLAY_TYPE_INIT ); -- ================================================================ -- BAX - BUSARRAYENTRY EXTENSION -- ================================================================ -- This structure is the BusArray eXtension and provides more -- detail for the characterization of the hardware represented -- by the BUSARRAYENTRY. -- BAX_K_LENGTH : constant := 112; type BAX_BUS_DATA_DESCRIPTOR_TYPE is record BUS_DATA_SIZE : UNSIGNED_LONGWORD; BUS_DATA_TYPE : UNSIGNED_LONGWORD; BUS_DATA : ADDRESS; end record; for BAX_BUS_DATA_DESCRIPTOR_TYPE use record BUS_DATA_SIZE at 0 range 0 .. 31; BUS_DATA_TYPE at 4 range 0 .. 31; BUS_DATA at 8 range 0 .. 31; end record; for BAX_BUS_DATA_DESCRIPTOR_TYPE'SIZE use 96; BAX_BUS_DATA_DESCRIPTOR_TYPE_INIT : constant BAX_BUS_DATA_DESCRIPTOR_TYPE := (BUS_DATA_SIZE => 0, BUS_DATA_TYPE => 0, BUS_DATA => ADDRESS_ZERO); type BAX_BUS_DATA_TYPE is record BUS_DATA_AREA : UNSIGNED_QUADWORD_ARRAY (1 .. 4); ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BUS_DATA_DESCRIPTOR : BAX_BUS_DATA_DESCRIPTOR_TYPE; end record; for BAX_BUS_DATA_TYPE use record BUS_DATA_AREA at 24 range 0 .. 255; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BUS_DATA_DESCRIPTOR at 24 range 0 .. 95; end record; for BAX_BUS_DATA_TYPE'SIZE use 256; BAX_BUS_DATA_TYPE_INIT : constant BAX_BUS_DATA_TYPE := ( BUS_DATA_AREA => (others => (0, 0)) ); type BAX_TYPE is record -- -- -- The following field points back to the ADP on which this BAX -- resides. -- PARENT_ADP : ADDRESS; -- Mother ADP -- -- -- This field points back to the BUSARRAYENTRY that "owns" this BAX -- instance. -- PARENT_BAE : ADDRESS; -- -- -- -------------------------------------------------------------- -- General Data -- -------------------------------------------------------------- -- CHANNEL : UNSIGNED_LONGWORD; -- Channel number VEC_LIST : ADDRESS; -- Interrupt Vectors List see IOCDEF INT_MECH : UNSIGNED_LONGWORD; -- Interrupt delivery mechanism -- -- -- -------------------------------------------------------------- -- Descriptor for Bus-specific data buffer. -- -------------------------------------------------------------- -- For PCI busses, this is a snapshot of the Config Header. -- FILLER_1 : UNSIGNED_BYTE_ARRAY (0 .. 3); BUS_DATA : BAX_BUS_DATA_TYPE; -- -- -- -------------------------------------------------------------- -- Interrupt Routine Pointers -- -------------------------------------------------------------- -- Since PCI-X, it has been possible for devices on the same bus -- to use different interrupt technologies. These fields provide -- long (64-bit) and short (32-bit) pointers to the device-specific -- Interrupt Init, Enable, Disable, and Redirection routines. These -- fields are initialized with the appropriate routine pointer when -- the interrupt technology is determined (IOSAPIC, MSI, MSI-X...), -- during device configuration. The IRQ init and node_function -- routines will call through these pointers to the correct routine -- for the device. -- MSIABS : ADDRESS; INIT_INTERRUPT : ADDRESS; ENABLE_INTERRUPT : ADDRESS; DISABLE_INTERRUPT : ADDRESS; REDIRECT_INTERRUPT : ADDRESS; -- -- -- -------------------------------------------------------------- -- Multiple Vector Interrupt Routines and Data -- -------------------------------------------------------------- MVI_DATA : ADDRESS; MVI_REQUEST_VECTORS : ADDRESS; MVI_MAP_VECTOR : ADDRESS; MVI_DISPATCH_VTE : ADDRESS; -- MSIX only MVI_DISPATCH_UNIQUE : ADDRESS; MVI_DISPATCH_VECTOR : ADDRESS; MVI_MASK_VECTOR : ADDRESS; MVI_UNMASK_VECTOR : ADDRESS; MVI_PENDING_VECTOR : ADDRESS; -- -- -- Fill to quadword boundary -- FILLER_2 : UNSIGNED_BYTE_ARRAY (1 .. 0); end record; for BAX_TYPE use record PARENT_ADP at 0 range 0 .. 31; PARENT_BAE at 4 range 0 .. 31; CHANNEL at 8 range 0 .. 31; VEC_LIST at 12 range 0 .. 31; INT_MECH at 16 range 0 .. 31; FILLER_1 at 20 range 0 .. 31; BUS_DATA at 24 range 0 .. 255; MSIABS at 56 range 0 .. 31; INIT_INTERRUPT at 60 range 0 .. 31; ENABLE_INTERRUPT at 64 range 0 .. 31; DISABLE_INTERRUPT at 68 range 0 .. 31; REDIRECT_INTERRUPT at 72 range 0 .. 31; MVI_DATA at 76 range 0 .. 31; MVI_REQUEST_VECTORS at 80 range 0 .. 31; MVI_MAP_VECTOR at 84 range 0 .. 31; MVI_DISPATCH_VTE at 88 range 0 .. 31; MVI_DISPATCH_UNIQUE at 92 range 0 .. 31; MVI_DISPATCH_VECTOR at 96 range 0 .. 31; MVI_MASK_VECTOR at 100 range 0 .. 31; MVI_UNMASK_VECTOR at 104 range 0 .. 31; MVI_PENDING_VECTOR at 108 range 0 .. 31; FILLER_2 at 112 range 0 .. -1; end record; for BAX_TYPE'SIZE use 896; BAX_TYPE_INIT : constant BAX_TYPE := (PARENT_ADP => ADDRESS_ZERO, PARENT_BAE => ADDRESS_ZERO, CHANNEL => 0, VEC_LIST => ADDRESS_ZERO, INT_MECH => 0, FILLER_1 => (others => 0), BUS_DATA => BAX_BUS_DATA_TYPE_INIT, MSIABS => ADDRESS_ZERO, INIT_INTERRUPT => ADDRESS_ZERO, ENABLE_INTERRUPT => ADDRESS_ZERO, DISABLE_INTERRUPT => ADDRESS_ZERO, REDIRECT_INTERRUPT => ADDRESS_ZERO, MVI_DATA => ADDRESS_ZERO, MVI_REQUEST_VECTORS => ADDRESS_ZERO, MVI_MAP_VECTOR => ADDRESS_ZERO, MVI_DISPATCH_VTE => ADDRESS_ZERO, MVI_DISPATCH_UNIQUE => ADDRESS_ZERO, MVI_DISPATCH_VECTOR => ADDRESS_ZERO, MVI_MASK_VECTOR => ADDRESS_ZERO, MVI_UNMASK_VECTOR => ADDRESS_ZERO, MVI_PENDING_VECTOR => ADDRESS_ZERO, FILLER_2 => (others => 0)); end BUSARRAYDEF;