Difference between revisions of "Unit PL18X"

From Ultibo.org
Jump to: navigation, search
 
(8 intermediate revisions by the same user not shown)
Line 14: Line 14:
 
----
 
----
  
''To be documented''
+
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X specific constants''' <code> PL180_MMCI_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL180_MMCI_DESCRIPTION = 'ARM PrimeCell PL180 MMCI Host';</code>
 +
| Description of PL180 device
 +
|-
 +
| <code>PL181_MMCI_DESCRIPTION = 'ARM PrimeCell PL181 MMCI Host';</code>
 +
| Description of PL181 device
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X power control register''' <code> PL18X_MMCI_POWER_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_POWER = $000;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_OFF = $00;</code>
 +
| Power-off
 +
|-
 +
|colspan="2"|''Bits 1:0 - $01 Reserved''
 +
|-
 +
| <code>PL18X_MMCI_POWER_UP = $02;</code>
 +
| Power-up
 +
|-
 +
| <code>PL18X_MMCI_POWER_ON = $03;</code>
 +
| Power-on
 +
|-
 +
|colspan="2"|''Bits 5:2 - Output Voltage''
 +
|-
 +
| <code>PL18X_MMCI_POWER_OD = (1 shl 6);</code>
 +
| MCICMD output control
 +
|-
 +
| <code>PL18X_MMCI_POWER_ROD = (1 shl 7);</code>
 +
| Rod control
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''The ST Micro version does not have ROD and reuses the voltage registers for direction settings''
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_DATA2DIREN = (1 shl 2);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_CMDDIREN = (1 shl 3);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_DATA0DIREN = (1 shl 4);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_DATA31DIREN = (1 shl 5);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_FBCLKEN = (1 shl 7);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_POWER_ST_DATA74DIREN = (1 shl 8);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X clock control register''' <code> PL18X_MMCI_CLOCK* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_CLOCK = $004;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ENABLE = (1 shl 8);</code>
 +
| Enable MCI bus clock: 0 = Clock disabled / 1 = Clock enabled
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_PWRSAVE = (1 shl 9);</code>
 +
| Disable MCI clock output when bus is idle: 0 = Always enabled / 1 = Clock enabled when bus is active
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_BYPASS = (1 shl 10);</code>
 +
| Enable bypass of clock divide logic: 0 = Disable bypass / 1 = Enable bypass
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_4BIT_BUS = (1 shl 11);</code>
 +
| Enable wide bus mode: 0 = Standard bus mode (only MCIDAT0 used) / 1 = Wide bus mode (MCIDAT3:0 used)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''8bit wide buses, hardware flow contronl, negative edges and clock inversion supported in ST Micro U300 and Ux500 versions''
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ST_8BIT_BUS  = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ST_U300_HWFCEN = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ST_UX500_NEG_EDGE = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ST_UX500_HWFCEN = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ST_UX500_CLK_INV = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Modified PL180 on Versatile Express platform''
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_ARM_HWFCEN = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''Modified on Qualcomm Integrations''
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_QCOM_WIDEBUS_8 = (1 shl 10) or (1 shl 11);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_QCOM_FLOWENA = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_QCOM_INVERTOUT = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''Select in latch data and command in''
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_QCOM_SELECT_IN_FBCLK = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CLOCK_QCOM_SELECT_IN_DDR_MODE = (1 shl 14) or (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X argument register''' <code> PL18X_MMCI_ARGUMENT* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_ARGUMENT = $008;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''Bits 31:0 Command Argument''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X command register''' <code> PL18X_MMCI_COMMAND* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_COMMAND = $00c;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Bits 5:0 Command Index''
 +
|-
 +
| <code>PL18X_MMCI_CPSM_RESPONSE = (1 shl 6);</code>
 +
| If set, CPSM waits for a response
 +
|-
 +
| <code>PL18X_MMCI_CPSM_LONGRSP = (1 shl 7);</code>
 +
| If set, CPSM receives a 136-bit long response
 +
|-
 +
| <code>PL18X_MMCI_CPSM_INTERRUPT = (1 shl 8);</code>
 +
| If set, CPSM disables command timer and waits for interrupt request
 +
|-
 +
| <code>PL18X_MMCI_CPSM_PENDING = (1 shl 9);</code>
 +
| If set, CPSM waits for CmdPend before it starts sending a command
 +
|-
 +
| <code>PL18X_MMCI_CPSM_ENABLE = (1 shl 10);</code>
 +
| If set, CPSM is enabled
 +
|-
 +
|colspan="2"|''Argument flag extenstions in the ST Micro versions''
 +
|-
 +
| <code>PL18X_MMCI_CPSM_ST_SDIO_SUSP = (1 shl 11);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_ST_ENCMD_COMPL = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_ST_NIEN = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_ST_CE_ATACMD = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''Modified on Qualcomm Integrations''
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_DATCMD = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_MCIABORT = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_CCSENABLE = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_CCSDISABLE = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_AUTO_CMD19 = (1 shl 16);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CPSM_QCOM_AUTO_CMD21 = (1 shl 21);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X command response register''' <code> PL18X_MMCI_RESPCMD* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_RESPCMD = $010;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''Bits 5:0 Response command index''
 +
|-
 +
|colspan="2"|''Bits 31:6 Reserved''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X response registers''' <code> PL18X_MMCI_RESPONSE* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_RESPONSE0 = $014;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RESPONSE1 = $018;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RESPONSE2 = $01c;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RESPONSE3 = $020;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Bits 31:0 Card Status''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X data timer register''' <code> PL18X_MMCI_DATATIMER* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_DATATIMER = $024;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''Bits 31:0 Data Timeout Period''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X data length register''' <code> PL18X_MMCI_DATALENGTH* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_DATALENGTH = $028;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''Bits 15:0 Data Length Value''
 +
|-
 +
|colspan="2"|''Bits 31:16 Reserved''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X data control register''' <code> PL18X_MMCI_DATACTRL* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_DATACTRL = $02c;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DPSM_ENABLE = (1 shl 0);</code>
 +
| Data transfer enabled
 +
|-
 +
| <code>PL18X_MMCI_DPSM_DIRECTION = (1 shl 1);</code>
 +
| Data transfer direction: 0 = From controller to card / 1 = From card to controller
 +
|-
 +
| <code>PL18X_MMCI_DPSM_MODE = (1 shl 2);</code>
 +
| Data transfer mode: 0 = Block data transfer / 1 = Stream data transfer
 +
|-
 +
| <code>PL18X_MMCI_DPSM_BLOCKSIZE = (1 shl 4);</code>
 +
| Data block length
 +
|-
 +
|colspan="2"|''Control register extensions in the ST Micro U300 and Ux500 versions''
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_RWSTART = (1 shl 8);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_RWSTOP = (1 shl 9);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_RWMOD = (1 shl 10);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_SDIOEN = (1 shl 11);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Control register extensions in the ST Micro Ux500 versions''
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_DMAREQCTL = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_DBOOTMODEEN = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_BUSYMODE = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_DPSM_DDRMODE = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X data counter register''' <code> PL18X_MMCI_DATACNT* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_DATACNT = $030;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''Bits 15:0 Remaining Data''
 +
|-
 +
|colspan="2"|''Bits 31:16 Reserved''
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X status register''' <code> PL18X_MMCI_STATUS* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_STATUS = $034;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDCRCFAIL = (1 shl 0);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATACRCFAIL = (1 shl 1);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDTIMEOUT = (1 shl 2);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATATIMEOUT = (1 shl 3);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXUNDERRUN = (1 shl 4);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXOVERRUN = (1 shl 5);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDRESPEND = (1 shl 6);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDSENT = (1 shl 7);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATAEND = (1 shl 8);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_STARTBITERR = (1 shl 9);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATABLOCKEND = (1 shl 10);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDACTIVE = (1 shl 11);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXACTIVE = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXACTIVE = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOHALFEMPTY = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOHALFFULL = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOFULL = (1 shl 16);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOFULL = (1 shl 17);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOEMPTY = (1 shl 18);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOEMPTY = (1 shl 19);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXDATAAVLBL = (1 shl 20);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXDATAAVLBL = (1 shl 21);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Extended status bits for the ST Micro variants''
 +
|-
 +
| <code>PL18X_MMCI_ST_SDIOIT = (1 shl 22);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_CEATAEND = (1 shl 23);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_CARDBUSY = (1 shl 24);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X clear register''' <code> PL18X_MMCI_CLEAR* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_CLEAR = $038;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDCRCFAILCLR = (1 shl 0);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATACRCFAILCLR = (1 shl 1);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDTIMEOUTCLR = (1 shl 2);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATATIMEOUTCLR = (1 shl 3);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXUNDERRUNCLR = (1 shl 4);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXOVERRUNCLR = (1 shl 5);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDRESPENDCLR = (1 shl 6);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDSENTCLR = (1 shl 7);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATAENDCLR = (1 shl 8);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_STARTBITERRCLR = (1 shl 9);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATABLOCKENDCLR = (1 shl 10);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Extended status bits for the ST Micro variants''
 +
|-
 +
| <code>PL18X_MMCI_ST_SDIOITC = (1 shl 22);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_CEATAENDC = (1 shl 23);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_BUSYENDC = (1 shl 24);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X interrupt mask registers''' <code> PL18X_MMCI_MASK* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_MASK0 = $03c;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PL18X_MMCI_MASK1 = $040;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDCRCFAILMASK = (1 shl 0);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATACRCFAILMASK = (1 shl 1);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDTIMEOUTMASK = (1 shl 2);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATATIMEOUTMASK = (1 shl 3);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXUNDERRUNMASK = (1 shl 4);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXOVERRUNMASK = (1 shl 5);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDRESPENDMASK = (1 shl 6);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDSENTMASK = (1 shl 7);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATAENDMASK = (1 shl 8);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_STARTBITERRMASK = (1 shl 9);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_DATABLOCKENDMASK = (1 shl 10);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_CMDACTIVEMASK = (1 shl 11);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXACTIVEMASK = (1 shl 12);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXACTIVEMASK = (1 shl 13);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOHALFEMPTYMASK = (1 shl 14);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOHALFFULLMASK = (1 shl 15);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOFULLMASK  = (1 shl 16);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOFULLMASK = (1 shl 17);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXFIFOEMPTYMASK = (1 shl 18);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXFIFOEMPTYMASK = (1 shl 19);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_TXDATAAVLBLMASK = (1 shl 20);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_RXDATAAVLBLMASK = (1 shl 21);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Extended status bits for the ST Micro variants''
 +
|-
 +
| <code>PL18X_MMCI_ST_SDIOITMASK = (1 shl 22);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_CEATAENDMASK = (1 shl 23);</code>
 +
| &nbsp;
 +
|-
 +
| <code>PL18X_MMCI_ST_BUSYEND = (1 shl 24);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X SD card select register''' <code> PL18X_MMCI_SELECT* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_SELECT = $044;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X FIFO counter register''' <code> PL18X_MMCI_FIFOCNT* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_FIFOCNT = $048;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X data FIFO register''' <code> PL18X_MMCI_FIFO* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_FIFO = $080;</code>
 +
| To $0bc
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X peripheral identification register''' <code> PL18X_MMCI_PERIPHID* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_PERIPHID = $FE0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL18X PrimeCell identification register''' <code> PL18X_MMCI_PCELLID* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL18X_MMCI_PCELLID = $FF0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PL18X_MMCI_IRQENABLE = (PL18X_MMCI_CMDCRCFAILMASK or PL18X_MMCI_DATACRCFAILMASK or PL18X_MMCI_CMDTIMEOUTMASK or PL18X_MMCI_DATATIMEOUTMASK or PL18X_MMCI_TXUNDERRUNMASK or PL18X_MMCI_RXOVERRUNMASK or PL18X_MMCI_CMDRESPENDMASK or PL18X_MMCI_CMDSENTMASK or PL18X_MMCI_STARTBITERRMASK);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''These interrupts are directed to IRQ1 when two IRQ lines are available''
 +
|-
 +
| <code>PL18X_MMCI_IRQ1MASK = (PL18X_MMCI_RXFIFOHALFFULLMASK or PL18X_MMCI_RXDATAAVLBLMASK or PL18X_MMCI_TXFIFOHALFEMPTYMASK);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===
 
----
 
----
  
''To be documented''
+
 
 +
'''PL18X version Id'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPL18XVersionID = ^TPL18XVersionID;</code>
 +
 
 +
<code>TPL18XVersionID = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PeripheralID:LongWord;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PeripheralMask:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>VersionData:PPL18XVersionData;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''PL18X version data'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPL18XVersionData = ^TPL18XVersionData;</code>
 +
 
 +
<code>TPL18XVersionData = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>Name:String;</code>
 +
| Name of the device
 +
|-
 +
| <code>ClockRegister:LongWord;</code>
 +
| Default value for MCICLOCK register
 +
|-
 +
| <code>ClockEnable:LongWord;</code>
 +
| Enable value for MMCICLOCK register
 +
|-
 +
| <code>Clock8BitEnable:LongWord;</code>
 +
| Enable value for 8 bit bus
 +
|-
 +
| <code>ClockNegativeEdgeEnable:LongWord;</code>
 +
| Enable value for inverted data/cmd output
 +
|-
 +
| <code>DataLengthBits:LongWord;</code>
 +
| Number of bits in the MMCIDATALENGTH register
 +
|-
 +
| <code>FIFOSize:LongWord;</code>
 +
| Number of bytes that can be written when MMCI_TXFIFOEMPTY is asserted (likewise for RX)
 +
|-
 +
| <code>FIFOHalfSize:LongWord;</code>
 +
| Number of bytes that can be written when MCI_TXFIFOHALFEMPTY is asserted (likewise for RX)
 +
|-
 +
| <code>DataCommandEnable:LongWord;</code>
 +
| Enable value for data commands
 +
|-
 +
| <code>DataControlMaskDDR:LongWord;</code>
 +
| DDR mode mask in MMCIDATACTRL register
 +
|-
 +
| <code>DataControlMaskSDIO:LongWord;</code>
 +
| SDIO enable mask in MMCIDATACTRL register
 +
|-
 +
| <code>STSDIO:LongBool;</code>
 +
| Enable ST specific SDIO logic
 +
|-
 +
| <code>STClockDivider:LongBool;</code>
 +
| True if using a ST-specific clock divider algorithm
 +
|-
 +
| <code>BlockSizeDataControl16:LongBool;</code>
 +
| True if Block size is at b16..b30 position in MMCIDATACTRL register
 +
|-
 +
| <code>BlockSizeDataControl4:LongBool;</code>
 +
| True if Block size is at b4..b16 position in MMCIDATACTRL register
 +
|-
 +
| <code>PowerPowerUp:LongWord;</code>
 +
| Power up value for MMCIPOWER register
 +
|-
 +
| <code>ClockMaximum:LongWord;</code>
 +
| Maximum clk frequency supported by the controller
 +
|-
 +
| <code>SignalDirection:LongBool;</code>
 +
| Input/out direction of bus signals can be indicated
 +
|-
 +
| <code>PowerClockGate:LongBool;</code>
 +
| MMCIPOWER register must be used to gate the clock
 +
|-
 +
| <code>BusyDetect:LongBool;</code>
 +
| True if busy detection on dat0 is supported
 +
|-
 +
| <code>PowerNoPower:LongBool;</code>
 +
| Bits in MMCIPOWER don't control external power supply
 +
|-
 +
| <code>ExplicitMClockControl:LongBool;</code>
 +
| Enable explicit mclk control in driver
 +
|-
 +
| <code>QualcommFIFO:LongBool;</code>
 +
| Enable Qualcomm specific FIFO PIO read logic
 +
|-
 +
| <code>QualcommDMA:LongBool;</code>
 +
| Enable Qualcomm specific DMA glue for DMA transfers
 +
|-
 +
| <code>ReversedIRQ:LongBool;</code>
 +
| Handle data irq before cmd irq
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''PL18X MMCI registers'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPL18XMMCIRegisters = ^TPL18XMMCIRegisters;</code>
 +
 
 +
<code>TPL18XMMCIRegisters = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: Layout of the PL18X registers (See: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0172a/i1006458.html)
 +
|-
 +
| <code>Power:LongWord;</code>
 +
| Power control register
 +
|-
 +
| <code>Clock:LongWord;</code>
 +
| Clock control register
 +
|-
 +
| <code>Argument:LongWord;</code>
 +
| Argument register
 +
|-
 +
| <code>Command:LongWord;</code>
 +
| Command register
 +
|-
 +
| <code>RespCmd:LongWord;</code>
 +
| Response command register
 +
|-
 +
| <code>Response0:LongWord;</code>
 +
| Response register
 +
|-
 +
| <code>Response1:LongWord;</code>
 +
| Response register
 +
|-
 +
| <code>Response2:LongWord;</code>
 +
| Response register
 +
|-
 +
| <code>Response3:LongWord;</code>
 +
| Response register
 +
|-
 +
| <code>DataTimer:LongWord;</code>
 +
| Data timer
 +
|-
 +
| <code>DataLength:LongWord;</code>
 +
| Data length register
 +
|-
 +
| <code>DataCtrl:LongWord;</code>
 +
| Data control register
 +
|-
 +
| <code>DataCnt:LongWord;</code>
 +
| Data counter
 +
|-
 +
| <code>Status:LongWord;</code>
 +
| Status register
 +
|-
 +
| <code>Clear:LongWord;</code>
 +
| Clear register
 +
|-
 +
| <code>Mask0:LongWord;</code>
 +
| Interrupt 0 mask register
 +
|-
 +
| <code>Mask1:LongWord;</code>
 +
| Interrupt 1 mask register
 +
|-
 +
| <code>Select:LongWord;</code>
 +
| Secure digital memory card select register
 +
|-
 +
| <code>FifoCnt:LongWord;</code>
 +
| FIFO counter
 +
|-
 +
| <code>Reserved:array[$4C..$7C] of Byte;</code>
 +
| Reserved
 +
|-
 +
| <code>FIFO:LongWord;</code>
 +
| Data FIFO register (0x80 to 0xBC)
 +
|-
 +
|}
 +
</div></div>
 +
 +
'''PL18X SDHCI get RXFIFO count'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TPL18XSDHCIGetRXFIFOCount = function(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''PL18X SDHCI host'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPL18XSDHCIHost = ^TPL18XSDHCIHost;</code>
 +
 
 +
<code>TPL18XSDHCIHost = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''SDHCI Properties''
 +
|-
 +
| <code>SDHCI:TSDHCIHost;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''PL18X Properties''
 +
|-
 +
| <code>IRQ0:LongWord;</code>
 +
| First host IRQ line
 +
|-
 +
| <code>IRQ1:LongWord;</code>
 +
| Second host IRQ line
 +
|-
 +
| <code>EnableFIQ:LongBool;</code>
 +
| Use FIQ instead of IRQ
 +
|-
 +
| <code>SingleIRQ:LongBool;</code>
 +
| The host only has a single IRQ line instead of the standard 2 lines
 +
|-
 +
| <code>Registers:PPL18XMMCIRegisters;</code>
 +
| Host registers
 +
|-
 +
| <code>Version:PPL18XVersionData;</code>
 +
| Host version data
 +
|-
 +
| <code>ClockRegister:LongWord;</code>
 +
| Current clock register value
 +
|-
 +
| <code>PowerRegister:LongWord;</code>
 +
| Current power register value
 +
|-
 +
| <code>DataCtrlRegister:LongWord;</code>
 +
| Current data control register value
 +
|-
 +
| <code>BusyStatus:LongWord;</code>
 +
| Current Busy Status for ST Micro variants
 +
|-
 +
| <code>GetRXFIFOCount:TPL18XSDHCIGetRXFIFOCount;</code>
 +
| Model specific GetRXFIFOCount function
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
 
----
 
----
  
''To be documented''
+
 
 +
'''PL18X specific variables'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>PL18X_MMCI_FIQ_ENABLED:LongBool;</code>
 +
| style="width: 40%;"|The SDHCI uses Fast Interrupt Requests (FIQ) instead of IRQ
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>PL18X_MMCI_MIN_FREQ:LongWord = 400000;</code>
 +
| style="width: 40%;"|Minimum clock frequency for SDHCI (Default minimum of 400KHz)
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>PL18X_MMCI_MAX_FREQ:LongWord = 400000;</code>
 +
| style="width: 40%;"|Maximum clock frequency for SDHCI (Default maximum of 400KHz)
 +
|-
 +
|}
 +
<br />
  
 
=== Function declarations ===
 
=== Function declarations ===
 
----
 
----
  
''To be documented''
 
  
 +
'''Initialization functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XInit;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the PL18X unit and version table</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called only during system startup
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''PL18X functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL180SDHCICreate(Address:PtrUInt; const Name:String; IRQ0,IRQ1,ClockMinimum,ClockMaximum:LongWord; CardDetect:TMMCDeviceGetCardDetect = nil; WriteProtect:TMMCDeviceGetWriteProtect = nil):PSDHCIHost;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create and register a new PL180 SDHCI device which can be accessed using the SDHCI API</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Address
 +
| The address of the PL180 registers
 +
|-
 +
! Name
 +
| The text description of this device which will show in the device list (Optional)
 +
|-
 +
! IRQ0
 +
| The interrupt 0 number for the PL180
 +
|-
 +
! IRQ1
 +
| The interrupt 1 number for the PL180
 +
|-
 +
! ClockMinimum
 +
| The minimum frequency for the Pl180 clock
 +
|-
 +
! ClockMaximum
 +
| The maximum frequency for the Pl180 clock
 +
|-
 +
! Return
 +
| Pointer to the new SDHCI device or nil if the SDHCI device could not be created
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL181SDHCICreate(Address:PtrUInt; const Name:String; IRQ0,IRQ1,ClockMinimum,ClockMaximum:LongWord; CardDetect:TMMCDeviceGetCardDetect = nil; WriteProtect:TMMCDeviceGetWriteProtect = nil):PSDHCIHost;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create and register a new PL181 SDHCI device which can be accessed using the SDHCI API</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Address
 +
| The address of the PL181 registers
 +
|-
 +
! Name
 +
| The text description of this device which will show in the device list (Optional)
 +
|-
 +
! IRQ0
 +
| The interrupt 0 number for the PL181
 +
|-
 +
! IRQ1
 +
| The interrupt 1 number for the PL181
 +
|-
 +
! ClockMinimum
 +
| The minimum frequency for the Pl181 clock
 +
|-
 +
! ClockMaximum
 +
| The maximum frequency for the Pl181 clock
 +
|-
 +
! Return
 +
| Pointer to the new SDHCI device or nil if the SDHCI device could not be created
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIDestroy(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Stop, deregister and destroy a PL18X SDHCI device created by this driver</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! SDHCI
 +
| The SDHCI device to destroy
 +
|-
 +
! Return
 +
| ERROR_SUCCESS if completed or another error code on failure
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''PL18X MMC functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XMMCDeviceGetCardDetect(MMC:PMMCDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of MMCDeviceGetCardDetect API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use MMCDeviceGetCardDetect instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XMMCDeviceGetWriteProtect(MMC:PMMCDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of MMCDeviceGetWriteProtect API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use MMCDeviceGetWriteProtect instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XMMCDeviceSendCommand(MMC:PMMCDevice; Command:PMMCCommand):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of MMCDeviceSendCommand API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use MMCDeviceSendCommand instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XMMCDeviceSetIOS(MMC:PMMCDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of MMCDeviceSetIOS API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use MMCDeviceSetIOS instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''PL18X SDHCI functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostStart(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostStart API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostStart instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostStop(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostStop API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostStop instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostReadByte(SDHCI:PSDHCIHost; Reg:LongWord):Byte;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadByte API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadByte instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostReadWord(SDHCI:PSDHCIHost; Reg:LongWord):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadWord API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadWord instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostReadLong(SDHCI:PSDHCIHost; Reg:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadLong API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadLong instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIHostWriteByte(SDHCI:PSDHCIHost; Reg:LongWord; Value:Byte);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteByte API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteByte instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIHostWriteWord(SDHCI:PSDHCIHost; Reg:LongWord; Value:Word);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteWord API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteWord instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIHostWriteLong(SDHCI:PSDHCIHost; Reg:LongWord; Value:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteLong API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteLong instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIHostSetPower(SDHCI:PSDHCIHost; Power:Word):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCISetPower API for PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCISetPower instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIInterruptHandler(SDHCI:PPL18XSDHCIHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIDataInterrupt(SDHCI:PPL18XSDHCIHost; Status:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Data interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCICommandInterrupt(SDHCI:PPL18XSDHCIHost; Status:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Command interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIStopData(SDHCI:PPL18XSDHCIHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Data stop handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSDHCIPIOInterruptHandler(SDHCI:PPL18XSDHCIHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' PIO Interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSHDCIReadPIO(SDHCI:PPL18XSDHCIHost ;Buffer:Pointer; Remain:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' PIO read interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XSDHCIWritePIO(SDHCI:PPL18XSDHCIHost; Buffer:Pointer; Remain,Status:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' PIO read interrupt handler for the PL18X SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''PL18X helper functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XGetPeripheralID(SDHCI:PPL18XSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Return the Peripheral Id for a PL18X SDHCI device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XGetVersionData(SDHCI:PPL18XSDHCIHost):PPL18XVersionData;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Return the version data for a PL18X SDHCI device based on the Peripheral Id</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XGetRXFIFOCount(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Determine the receive FIFO count available</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PL18XQualcommGetRXFIFOCount(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Determine the receive FIFO count available</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XRegisterDelay(SDHCI:PPL18XSDHCIHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Delay for the required amount of time after a register write</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSetClockRegister(SDHCI:PPL18XSDHCIHost; MMC:PMMCDevice; Desired:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Setup the current clock rate in the clock register</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSetPowerRegister(SDHCI:PPL18XSDHCIHost; Value:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Setup the current power state in the power register</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XSetInterruptMask1(SDHCI:PPL18XSDHCIHost; Mask:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Setup the interrupt mask to use either Mask0 or Mask1 depending on configuration</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XWriteClockRegister(SDHCI:PPL18XSDHCIHost; Clock:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write to the clock register</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XWritePowerRegister(SDHCI:PPL18XSDHCIHost; Power:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write to the power register</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure PL18XWriteDataCtrlRegister(SDHCI:PPL18XSDHCIHost; DataCtrl:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write to the data control register</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Caller must hold the host lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
Return to [[Unit_Reference|Unit Reference]]
 
Return to [[Unit_Reference|Unit Reference]]

Latest revision as of 06:06, 7 April 2023

Return to Unit Reference


Description


ARM PrimeCell PL180/181 Multimedia Card Interface Driver unit

The PL180/181 Multimedia Card is an ARM peripheral that is compatible with MMC multimedia cards and SD secure digital cards in memory mapped I/O format compatible with the ARM advanced peripheral bus (APB).

The design of the Pl180/181 allows for multiple cards per controller however this driver currently only supports attaching one card.

Constants



[Expand]
PL18X specific constants PL180_MMCI_*


[Expand]
PL18X power control register PL18X_MMCI_POWER_*


[Expand]
PL18X clock control register PL18X_MMCI_CLOCK*


[Expand]
PL18X argument register PL18X_MMCI_ARGUMENT*


[Expand]
PL18X command register PL18X_MMCI_COMMAND*


[Expand]
PL18X command response register PL18X_MMCI_RESPCMD*


[Expand]
PL18X response registers PL18X_MMCI_RESPONSE*


[Expand]
PL18X data timer register PL18X_MMCI_DATATIMER*


[Expand]
PL18X data length register PL18X_MMCI_DATALENGTH*


[Expand]
PL18X data control register PL18X_MMCI_DATACTRL*


[Expand]
PL18X data counter register PL18X_MMCI_DATACNT*


[Expand]
PL18X status register PL18X_MMCI_STATUS*


[Expand]
PL18X clear register PL18X_MMCI_CLEAR*


[Expand]
PL18X interrupt mask registers PL18X_MMCI_MASK*


[Expand]
PL18X SD card select register PL18X_MMCI_SELECT*


[Expand]
PL18X FIFO counter register PL18X_MMCI_FIFOCNT*


[Expand]
PL18X data FIFO register PL18X_MMCI_FIFO*


[Expand]
PL18X peripheral identification register PL18X_MMCI_PERIPHID*


[Expand]
PL18X PrimeCell identification register PL18X_MMCI_PCELLID*


Type definitions



PL18X version Id

[Expand]

PPL18XVersionID = ^TPL18XVersionID;

TPL18XVersionID = record

PL18X version data

[Expand]

PPL18XVersionData = ^TPL18XVersionData;

TPL18XVersionData = record

PL18X MMCI registers

[Expand]

PPL18XMMCIRegisters = ^TPL18XMMCIRegisters;

TPL18XMMCIRegisters = record

PL18X SDHCI get RXFIFO count

TPL18XSDHCIGetRXFIFOCount = function(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;

PL18X SDHCI host

[Expand]

PPL18XSDHCIHost = ^TPL18XSDHCIHost;

TPL18XSDHCIHost = record


Public variables



PL18X specific variables

PL18X_MMCI_FIQ_ENABLED:LongBool; The SDHCI uses Fast Interrupt Requests (FIQ) instead of IRQ
PL18X_MMCI_MIN_FREQ:LongWord = 400000; Minimum clock frequency for SDHCI (Default minimum of 400KHz)
PL18X_MMCI_MAX_FREQ:LongWord = 400000; Maximum clock frequency for SDHCI (Default maximum of 400KHz)


Function declarations



Initialization functions

[Expand]
procedure PL18XInit;
Description: Initialize the PL18X unit and version table


PL18X functions

[Expand]
function PL180SDHCICreate(Address:PtrUInt; const Name:String; IRQ0,IRQ1,ClockMinimum,ClockMaximum:LongWord; CardDetect:TMMCDeviceGetCardDetect = nil; WriteProtect:TMMCDeviceGetWriteProtect = nil):PSDHCIHost;
Description: Create and register a new PL180 SDHCI device which can be accessed using the SDHCI API


[Expand]
function PL181SDHCICreate(Address:PtrUInt; const Name:String; IRQ0,IRQ1,ClockMinimum,ClockMaximum:LongWord; CardDetect:TMMCDeviceGetCardDetect = nil; WriteProtect:TMMCDeviceGetWriteProtect = nil):PSDHCIHost;
Description: Create and register a new PL181 SDHCI device which can be accessed using the SDHCI API


[Expand]
function PL18XSDHCIDestroy(SDHCI:PSDHCIHost):LongWord;
Description: Stop, deregister and destroy a PL18X SDHCI device created by this driver


PL18X MMC functions

[Expand]
function PL18XMMCDeviceGetCardDetect(MMC:PMMCDevice):LongWord;
Description: Implementation of MMCDeviceGetCardDetect API for PL18X SDHCI


[Expand]
function PL18XMMCDeviceGetWriteProtect(MMC:PMMCDevice):LongWord;
Description: Implementation of MMCDeviceGetWriteProtect API for PL18X SDHCI


[Expand]
function PL18XMMCDeviceSendCommand(MMC:PMMCDevice; Command:PMMCCommand):LongWord;
Description: Implementation of MMCDeviceSendCommand API for PL18X SDHCI


[Expand]
function PL18XMMCDeviceSetIOS(MMC:PMMCDevice):LongWord;
Description: Implementation of MMCDeviceSetIOS API for PL18X SDHCI


PL18X SDHCI functions

[Expand]
function PL18XSDHCIHostStart(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostStart API for PL18X SDHCI


[Expand]
function PL18XSDHCIHostStop(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostStop API for PL18X SDHCI


[Expand]
function PL18XSDHCIHostReadByte(SDHCI:PSDHCIHost; Reg:LongWord):Byte;
Description: Implementation of SDHCIHostReadByte API for PL18X SDHCI


[Expand]
function PL18XSDHCIHostReadWord(SDHCI:PSDHCIHost; Reg:LongWord):Word;
Description: Implementation of SDHCIHostReadWord API for PL18X SDHCI


[Expand]
function PL18XSDHCIHostReadLong(SDHCI:PSDHCIHost; Reg:LongWord):LongWord;
Description: Implementation of SDHCIHostReadLong API for PL18X SDHCI


[Expand]
procedure PL18XSDHCIHostWriteByte(SDHCI:PSDHCIHost; Reg:LongWord; Value:Byte);
Description: Implementation of SDHCIHostWriteByte API for PL18X SDHCI


[Expand]
procedure PL18XSDHCIHostWriteWord(SDHCI:PSDHCIHost; Reg:LongWord; Value:Word);
Description: Implementation of SDHCIHostWriteWord API for PL18X SDHCI


[Expand]
procedure PL18XSDHCIHostWriteLong(SDHCI:PSDHCIHost; Reg:LongWord; Value:LongWord);
Description: Implementation of SDHCIHostWriteLong API for PL18X SDHCI


[Expand]
function PL18XSDHCIHostSetPower(SDHCI:PSDHCIHost; Power:Word):LongWord;
Description: Implementation of SDHCISetPower API for PL18X SDHCI


[Expand]
procedure PL18XSDHCIInterruptHandler(SDHCI:PPL18XSDHCIHost);
Description: Interrupt handler for the PL18X SDHCI


[Expand]
procedure PL18XSDHCIDataInterrupt(SDHCI:PPL18XSDHCIHost; Status:LongWord);
Description: Data interrupt handler for the PL18X SDHCI


[Expand]
procedure PL18XSDHCICommandInterrupt(SDHCI:PPL18XSDHCIHost; Status:LongWord);
Description: Command interrupt handler for the PL18X SDHCI


[Expand]
procedure PL18XSDHCIStopData(SDHCI:PPL18XSDHCIHost);
Description: Data stop handler for the PL18X SDHCI


[Expand]
procedure PL18XSDHCIPIOInterruptHandler(SDHCI:PPL18XSDHCIHost);
Description: PIO Interrupt handler for the PL18X SDHCI


[Expand]
function PL18XSHDCIReadPIO(SDHCI:PPL18XSDHCIHost ;Buffer:Pointer; Remain:LongWord):LongWord;
Description: PIO read interrupt handler for the PL18X SDHCI


[Expand]
function PL18XSDHCIWritePIO(SDHCI:PPL18XSDHCIHost; Buffer:Pointer; Remain,Status:LongWord):LongWord;
Description: PIO read interrupt handler for the PL18X SDHCI


PL18X helper functions

[Expand]
function PL18XGetPeripheralID(SDHCI:PPL18XSDHCIHost):LongWord;
Description: Return the Peripheral Id for a PL18X SDHCI device


[Expand]
function PL18XGetVersionData(SDHCI:PPL18XSDHCIHost):PPL18XVersionData;
Description: Return the version data for a PL18X SDHCI device based on the Peripheral Id


[Expand]
function PL18XGetRXFIFOCount(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;
Description: Determine the receive FIFO count available


[Expand]
function PL18XQualcommGetRXFIFOCount(SDHCI:PPL18XSDHCIHost; Status,Remain:LongWord):LongWord;
Description: Determine the receive FIFO count available


[Expand]
procedure PL18XRegisterDelay(SDHCI:PPL18XSDHCIHost);
Description: Delay for the required amount of time after a register write


[Expand]
procedure PL18XSetClockRegister(SDHCI:PPL18XSDHCIHost; MMC:PMMCDevice; Desired:LongWord);
Description: Setup the current clock rate in the clock register


[Expand]
procedure PL18XSetPowerRegister(SDHCI:PPL18XSDHCIHost; Value:LongWord);
Description: Setup the current power state in the power register


[Expand]
procedure PL18XSetInterruptMask1(SDHCI:PPL18XSDHCIHost; Mask:LongWord);
Description: Setup the interrupt mask to use either Mask0 or Mask1 depending on configuration


[Expand]
procedure PL18XWriteClockRegister(SDHCI:PPL18XSDHCIHost; Clock:LongWord);
Description: Write to the clock register


[Expand]
procedure PL18XWritePowerRegister(SDHCI:PPL18XSDHCIHost; Power:LongWord);
Description: Write to the power register


[Expand]
procedure PL18XWriteDataCtrlRegister(SDHCI:PPL18XSDHCIHost; DataCtrl:LongWord);
Description: Write to the data control register


Return to Unit Reference