; Copyright 2000 Pace Micro Technology plc
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
;     http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; The layout of the HAL descriptor

                        ^       0
HALDesc_Flags           #       4
HALDesc_Start           #       4
HALDesc_Size            #       4
HALDesc_Entries         #       4
HALDesc_NumEntries      #       4
HALDesc_Workspace       #       4
HALDesc_VideoRAMSize    #       4
HALDesc_size            #       4

HALFlag_NCNBWorkspace   *       1:SHL:0
HALFlag_LimitVideoRAM   *       1:SHL:1

; Entries to the HAL from the OS

                                ^       0
EntryNo_HAL_Init                #       1 ; 0

EntryNo_HAL_IRQEnable           #       1 ; 1
EntryNo_HAL_IRQDisable          #       1 ; 2
EntryNo_HAL_IRQClear            #       1 ; 3
EntryNo_HAL_IRQSource           #       1 ; 4
EntryNo_HAL_IRQStatus           #       1 ; 5
EntryNo_HAL_FIQEnable           #       1 ; 6
EntryNo_HAL_FIQDisable          #       1 ; 7
EntryNo_HAL_FIQDisableAll       #       1 ; 8
EntryNo_HAL_FIQClear            #       1 ; 9
EntryNo_HAL_FIQSource           #       1 ; 10
EntryNo_HAL_FIQStatus           #       1 ; 11

EntryNo_HAL_Timers              #       1 ; 12
EntryNo_HAL_TimerDevice         #       1 ; 13
EntryNo_HAL_TimerGranularity    #       1 ; 14
EntryNo_HAL_TimerMaxPeriod      #       1 ; 15
EntryNo_HAL_TimerSetPeriod      #       1 ; 16
EntryNo_HAL_TimerPeriod         #       1 ; 17
EntryNo_HAL_TimerReadCountdown  #       1 ; 18

EntryNo_HAL_CounterRate         #       1 ; 19
EntryNo_HAL_CounterPeriod       #       1 ; 20
EntryNo_HAL_CounterRead         #       1 ; 21
EntryNo_HAL_CounterDelay        #       1 ; 22

EntryNo_HAL_NVMemoryType        #       1 ; 23
EntryNo_HAL_NVMemorySize        #       1 ; 24
EntryNo_HAL_NVMemoryPageSize    #       1 ; 25
EntryNo_HAL_NVMemoryProtectedSize #     1 ; 26
EntryNo_HAL_NVMemoryProtection  #       1 ; 27
EntryNo_HAL_NVMemoryIICAddress  #       1 ; 28
EntryNo_HAL_NVMemoryRead        #       1 ; 29
EntryNo_HAL_NVMemoryWrite       #       1 ; 30

EntryNo_HAL_IICBuses            #       1 ; 31
EntryNo_HAL_IICType             #       1 ; 32
EntryNo_HAL_IICSetLines         #       1 ; 33
EntryNo_HAL_IICReadLines        #       1 ; 34
EntryNo_HAL_IICDevice           #       1 ; 35
EntryNo_HAL_IICTransfer         #       1 ; 36
EntryNo_HAL_IICMonitorTransfer  #       1 ; 37

EntryNo_HAL_VideoFlybackDevice        #  1 ; 38
EntryNo_HAL_VideoSetMode              #  1 ; 39
EntryNo_HAL_VideoWritePaletteEntry    #  1 ; 40
EntryNo_HAL_VideoWritePaletteEntries  #  1 ; 41
EntryNo_HAL_VideoReadPaletteEntry     #  1 ; 42
EntryNo_HAL_VideoSetInterlace         #  1 ; 43
EntryNo_HAL_VideoSetBlank             #  1 ; 44
EntryNo_HAL_VideoSetPowerSave         #  1 ; 45
EntryNo_HAL_VideoUpdatePointer        #  1 ; 46
EntryNo_HAL_VideoSetDAG               #  1 ; 47
EntryNo_HAL_VideoVetMode              #  1 ; 48
EntryNo_HAL_VideoPixelFormats         #  1 ; 49
EntryNo_HAL_VideoFeatures             #  1 ; 50
EntryNo_HAL_VideoBufferAlignment      #  1 ; 51
EntryNo_HAL_VideoOutputFormat         #  1 ; 52

EntryNo_HAL_MatrixColumns       #       1 ; 53
EntryNo_HAL_MatrixScan          #       1 ; 54

EntryNo_HAL_TouchscreenType     #       1 ; 55
EntryNo_HAL_TouchscreenRead     #       1 ; 56
EntryNo_HAL_TouchscreenMode     #       1 ; 57
EntryNo_HAL_TouchscreenMeasure  #       1 ; 58

EntryNo_HAL_MachineID           #       1 ; 59, ReadSysInfo 2
EntryNo_HAL_ControllerAddress   #       1 ; 60, Memory 9
EntryNo_HAL_HardwareInfo        #       1 ; 61, ReadSysInfo 2
EntryNo_HAL_SuperIOInfo         #       1 ; 62, ReadSysInfo 3
EntryNo_HAL_PlatformInfo        #       1 ; 63, ReadSysInfo 8
EntryNo_HAL_CleanerSpace        #       1 ; 64

EntryNo_HAL_UARTPorts           #       1 ; 65
EntryNo_HAL_UARTStartUp         #       1 ; 66
EntryNo_HAL_UARTShutdown        #       1 ; 67
EntryNo_HAL_UARTFeatures        #       1 ; 68
EntryNo_HAL_UARTReceiveByte     #       1 ; 69
EntryNo_HAL_UARTTransmitByte    #       1 ; 70
EntryNo_HAL_UARTLineStatus      #       1 ; 71
EntryNo_HAL_UARTInterruptEnable #       1 ; 72
EntryNo_HAL_UARTRate            #       1 ; 73
EntryNo_HAL_UARTFormat          #       1 ; 74
EntryNo_HAL_UARTFIFOSize        #       1 ; 75
EntryNo_HAL_UARTFIFOClear       #       1 ; 76
EntryNo_HAL_UARTFIFOEnable      #       1 ; 77
EntryNo_HAL_UARTFIFOThreshold   #       1 ; 78
EntryNo_HAL_UARTInterruptID     #       1 ; 79
EntryNo_HAL_UARTBreak           #       1 ; 80
EntryNo_HAL_UARTModemControl    #       1 ; 81
EntryNo_HAL_UARTModemStatus     #       1 ; 82
EntryNo_HAL_UARTDevice          #       1 ; 83

EntryNo_HAL_Reset               #       1 ; 84
EntryNo_HAL_DebugRX             #       1 ; 85
EntryNo_HAL_DebugTX             #       1 ; 86

EntryNo_HAL_PCIFeatures         #       1 ; 87
EntryNo_HAL_PCIReadConfigByte   #       1 ; 88
EntryNo_HAL_PCIReadConfigHalfword #     1 ; 89
EntryNo_HAL_PCIReadConfigWord   #       1 ; 90
EntryNo_HAL_PCIWriteConfigByte  #       1 ; 91
EntryNo_HAL_PCIWriteConfigHalfword #    1 ; 92
EntryNo_HAL_PCIWriteConfigWord  #       1 ; 93
EntryNo_HAL_PCISpecialCycle     #       1 ; 94
EntryNo_HAL_PCISlotTable        #       1 ; 95
EntryNo_HAL_PCIAddresses        #       1 ; 96

EntryNo_HAL_ATAControllerInfo   #       1 ; 97
EntryNo_HAL_ATASetModes         #       1 ; 98
EntryNo_HAL_ATACableID          #       1 ; 99

EntryNo_HAL_InitDevices         #       1 ; 100

EntryNo_HAL_KbdScanSetup        #       1 ; 101
EntryNo_HAL_KbdScan             #       1 ; 102
EntryNo_HAL_KbdScanFinish       #       1 ; 103
EntryNo_HAL_KbdScanInterrupt    #       1 ; 104

EntryNo_HAL_PhysInfo            #       1 ; 105

EntryNo_HAL_USBControllerInfo   #       1 ; 106

EntryNo_HAL_IRQMax              #       1 ; 107 (was HAL_MonitorLeadID)

EntryNo_HAL_VideoRender         #       1 ; 108

EntryNo_HAL_USBPortPower        #       1 ; 109
EntryNo_HAL_USBPortIRQStatus    #       1 ; 110
EntryNo_HAL_USBPortIRQClear     #       1 ; 111

EntryNo_HAL_VideoIICOp          #       1 ; 112

EntryNo_HAL_TimerIRQClear       #       1 ; 113
EntryNo_HAL_TimerIRQStatus      #       1 ; 114

EntryNo_HAL_ExtMachineID        #       1 ; 115, ReadSysInfo 10

EntryNo_HAL_VideoFramestoreAddress   #  1 ; 116

EntryNo_HAL_UARTDefault         #       1 ; 117

EntryNo_HAL_VideoStartupMode    #       1 ; 118
EntryNo_HAL_VideoPixelFormatList #      1 ; 119

EntryNo_HAL_USBPortDevice       #       1 ; 120

KnownHALEntries                 #       0 ; Used inside Kernel

; Various flags and constants

; OS_Hardware subreasons
                                ^ 0
OSHW_CallHAL                    # 1
OSHW_LookupRoutine              # 1
OSHW_DeviceAdd                  # 1
OSHW_DeviceRemove               # 1
OSHW_DeviceEnumerate            # 1
OSHW_DeviceEnumerateChrono      # 1
OSHW_MaxSubreason               # 1       ; Used in despatch inside Kernel

; PhysInfo
                                ^ 0
PhysInfo_GetTableSize           # 1
PhysInfo_WriteTable             # 1
PhysInfo_HardROM                # 1

; NVMemory

NVMemoryFlag_None               * 0
NVMemoryFlag_MaybeIIC           * 1
NVMemoryFlag_IIC                * 2
NVMemoryFlag_HAL                * 3
NVMemoryFlag_Provision          * &FF ; mask for provision
NVMemoryFlag_ProtectAtEnd       * 1:SHL:8   ; Protected region at end
NVMemoryFlag_Deprotectable      * 1:SHL:9
NVMemoryFlag_LowRead            * 1:SHL:10  ; locations 0-15 are readable
NVMemoryFlag_LowWrite           * 1:SHL:11  ; locations 0-15 are writeable

; IIC

IICFlag_LowLevel                * 1:SHL:0
IICFlag_HighLevel               * 1:SHL:1
IICFlag_MultiMaster             * 1:SHL:2
IICFlag_Slave                   * 1:SHL:3
IICFlag_Background              * 1:SHL:4
IICFlag_Fast                    * 1:SHL:16
IICFlag_HighSpeed               * 1:SHL:17
IICFlag_ProtocolVersionShift    * 20
IICFlag_ProtocolVersionMask     * &FFF      ; IIC protocol version x100
                                ^ 0
IICStatus_Completed             # 1         ; High level API return codes
IICStatus_InProgress            # 1
IICStatus_NoACK                 # 1
IICStatus_Busy                  # 1
IICStatus_Slave                 # 1
IICStatus_Error                 # 1

; Keyboard scan

KbdFlag_Ctrl    * 1:SHL:0
KbdFlag_Shift   * 1:SHL:1
KbdFlag_R       * 1:SHL:4
KbdFlag_T       * 1:SHL:5
KbdFlag_Delete  * 1:SHL:6
KbdFlag_Copy    * 1:SHL:7
KbdFlag_Present * 1:SHL:30
KbdFlag_Done    * 1:SHL:31

; USB

                                 ^ 0
HALUSBControllerInfo_Type        # 4 ; As below
HALUSBControllerInfo_Flags       # 4 ; As below
HALUSBControllerInfo_HW          # 4 ; Hardware base address
HALUSBControllerInfo_DevNo       # 4 ; IRQ device number
HALUSBControllerInfo_SizeOf      # 0 ; Size of base structure
                                 ^ HALUSBControllerInfo_SizeOf
HALUSBControllerInfo_DMAOffset   # 4 ; Offset from ARM physical -> DMA addresses
HALUSBControllerInfo_HW_MPHI     # 4 ; Message based Parallel Host Interface base address
HALUSBControllerInfo_DevNo_MPHI  # 4 ; IRQ device number
HALUSBControllerInfo_SizeOfType3 # 0 ; Size of extended structure for Synopsys DWC

HALUSBControllerType_OHCI        * 0
HALUSBControllerType_EHCI        * 1
HALUSBControllerType_MUSBMHDRC   * 2
HALUSBControllerType_SynopsysDWC * 3
HALUSBControllerType_XHCI        * 4

HALUSBControllerFlag_HAL_Port_Power   * 1 ; Use HAL_USBPortPower
HALUSBControllerFlag_HAL_Over_Current * 2 ; Use HAL_USBPortDevice/IRQStatus/IRQClear
HALUSBControllerFlag_32bit_Regs       * 8 ; Must use 32bit access for all registers
HALUSBControllerFlag_EHCI_ETTF        * &80000000 ; EHCI controller has embedded TT

        END