📄 type0_config.asm
字号:
/****************************************************************************************
This file configures devices which do not sit behind a PCI-to-PCI bridge, in this example
an ADSP-BF535 BUB board
*****************************************************************************************/
#include "defBF535.h"
#include "pci_ids.h"
#include "My_header.h"
.GLOBAL PCI_CONFIG_TYPE0;
.section L2_data;
.var Config_Space_type0[16];
.section program;
.align 4;
.extern DMA_TO_DEVICE;
.EXTERN DEVICE_EXECUTE;
/******************** HOST PCI Configurarion reads ************************/
PCI_CONFIG_TYPE0:
P4.H = Config_Space_type0; P4.L = Config_Space_type0;
P5.H = HI(PCI_CBAP); P5.L = LO(PCI_CBAP);
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x00;
[P5] = r0;
ssync;
P3.H = HI(PCI_CONFIG_SPACE_PORT); P3.L = LO(PCI_CONFIG_SPACE_PORT);
R0 = [P3];
ssync;
[P4++] = R0;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x04;
[P5] = r0;
ssync;
r1 = 0x207; // enable device to respond to mem and IO transactions and to master the PCI BUS
[P3] = r1;
ssync;
[P5] = r0;
R1 = [P3];
ssync;
[P4++] = R1;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x08;
[P5] = r0;
ssync;
R2 = [P3];
ssync;
[P4++] = R2;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x0c;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x10;
[P5] = r0;
ssync;
r4 = 0xFFFFFFFF;
[P3] = R4;
SSYNC;
[P5] = r0;
SSYNC;
R4 = [P3];
ssync;
[P5] = r0;
ssync;
P0.H = HI(Memory_Window); P0.L = LO(Memory_Window); // assign Device the base of PCI MEM space
[P3] = P0;
ssync;
[P5] = r0;
ssync;
r4 = [p3];
ssync;
[P4++] = R4;
ssync;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x14;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x18;
[P5] = r0;
ssync;
R5 = 0xFFFFFFFF;
[P3] = R5;
SSYNC;
[P5] = r0;
R5 = [P3];
ssync;
[P5] = r0;
ssync;
R1.H = HI(IO_Window); R1.L = LO(IO_Window); // map Device I/0 to the PCI IO space
[P3] = R1;
ssync;
[P5] = r0;
ssync;
r5 = [p3];
ssync;
[P4++] = R5;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x1c;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x20;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x24;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x28;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x2c;
[P5] = r0;
ssync;
R6 = [P3];
ssync;
[P4++] = R6;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x30;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x34;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x38;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
R0.H = BIT_31 | PCI_SLOT | BUS_NUMBER;
R0.L = DEVICE_NUMBER | FUNCTION_NUMBER| 0x3c;
[P5] = r0;
ssync;
R3 = [P3];
ssync;
[P4++] = R3;
PCI_CONFIG_TYPE0.END: NOP;
/************** DMA to device *******************/
CALL DMA_TO_DEVICE;
JUMP DEVICE_EXECUTE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -