0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef __AMLRESRC_H
0013 #define __AMLRESRC_H
0014
0015
0016
0017
0018
0019 #define ACPI_RESTAG_ADDRESS "_ADR"
0020 #define ACPI_RESTAG_ALIGNMENT "_ALN"
0021 #define ACPI_RESTAG_ADDRESSSPACE "_ASI"
0022 #define ACPI_RESTAG_ACCESSSIZE "_ASZ"
0023 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT"
0024 #define ACPI_RESTAG_BASEADDRESS "_BAS"
0025 #define ACPI_RESTAG_BUSMASTER "_BM_"
0026 #define ACPI_RESTAG_DEBOUNCETIME "_DBT"
0027 #define ACPI_RESTAG_DECODE "_DEC"
0028 #define ACPI_RESTAG_DEVICEPOLARITY "_DPL"
0029 #define ACPI_RESTAG_DMA "_DMA"
0030 #define ACPI_RESTAG_DMATYPE "_TYP"
0031 #define ACPI_RESTAG_DRIVESTRENGTH "_DRS"
0032 #define ACPI_RESTAG_ENDIANNESS "_END"
0033 #define ACPI_RESTAG_FLOWCONTROL "_FLC"
0034 #define ACPI_RESTAG_FUNCTION "_FUN"
0035 #define ACPI_RESTAG_GRANULARITY "_GRA"
0036 #define ACPI_RESTAG_INTERRUPT "_INT"
0037 #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_"
0038 #define ACPI_RESTAG_INTERRUPTSHARE "_SHR"
0039 #define ACPI_RESTAG_INTERRUPTTYPE "_HE_"
0040 #define ACPI_RESTAG_IORESTRICTION "_IOR"
0041 #define ACPI_RESTAG_LENGTH "_LEN"
0042 #define ACPI_RESTAG_LINE "_LIN"
0043 #define ACPI_RESTAG_LOCALPORT "_PRT"
0044 #define ACPI_RESTAG_MEMATTRIBUTES "_MTP"
0045 #define ACPI_RESTAG_MEMTYPE "_MEM"
0046 #define ACPI_RESTAG_MAXADDR "_MAX"
0047 #define ACPI_RESTAG_MINADDR "_MIN"
0048 #define ACPI_RESTAG_MAXTYPE "_MAF"
0049 #define ACPI_RESTAG_MINTYPE "_MIF"
0050 #define ACPI_RESTAG_MODE "_MOD"
0051 #define ACPI_RESTAG_PARITY "_PAR"
0052 #define ACPI_RESTAG_PHASE "_PHA"
0053 #define ACPI_RESTAG_PHYTYPE "_PHY"
0054 #define ACPI_RESTAG_PIN "_PIN"
0055 #define ACPI_RESTAG_PINCONFIG "_PPI"
0056 #define ACPI_RESTAG_PINCONFIG_TYPE "_TYP"
0057 #define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"
0058 #define ACPI_RESTAG_POLARITY "_POL"
0059 #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
0060 #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
0061 #define ACPI_RESTAG_RANGETYPE "_RNG"
0062 #define ACPI_RESTAG_READWRITETYPE "_RW_"
0063 #define ACPI_RESTAG_LENGTH_RX "_RXL"
0064 #define ACPI_RESTAG_LENGTH_TX "_TXL"
0065 #define ACPI_RESTAG_SLAVEMODE "_SLV"
0066 #define ACPI_RESTAG_SPEED "_SPE"
0067 #define ACPI_RESTAG_STOPBITS "_STB"
0068 #define ACPI_RESTAG_TRANSLATION "_TRA"
0069 #define ACPI_RESTAG_TRANSTYPE "_TRS"
0070 #define ACPI_RESTAG_TYPE "_TTP"
0071 #define ACPI_RESTAG_XFERTYPE "_SIZ"
0072 #define ACPI_RESTAG_VENDORDATA "_VEN"
0073
0074
0075
0076 #define ASL_RDESC_IRQ_SIZE 0x02
0077 #define ASL_RDESC_DMA_SIZE 0x02
0078 #define ASL_RDESC_ST_DEPEND_SIZE 0x00
0079 #define ASL_RDESC_END_DEPEND_SIZE 0x00
0080 #define ASL_RDESC_IO_SIZE 0x07
0081 #define ASL_RDESC_FIXED_IO_SIZE 0x03
0082 #define ASL_RDESC_FIXED_DMA_SIZE 0x05
0083 #define ASL_RDESC_END_TAG_SIZE 0x01
0084
0085 struct asl_resource_node {
0086 u32 buffer_length;
0087 void *buffer;
0088 struct asl_resource_node *next;
0089 };
0090
0091 struct asl_resource_info {
0092 union acpi_parse_object *descriptor_type_op;
0093 union acpi_parse_object *mapping_op;
0094 u32 current_byte_offset;
0095 };
0096
0097
0098
0099 #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (struct aml_resource_large_header))
0100 #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (struct aml_resource_small_header))
0101
0102
0103
0104
0105
0106
0107
0108 #pragma pack(1)
0109
0110
0111
0112
0113 #define AML_RESOURCE_SMALL_HEADER_COMMON \
0114 u8 descriptor_type;
0115
0116 struct aml_resource_small_header {
0117 AML_RESOURCE_SMALL_HEADER_COMMON};
0118
0119 struct aml_resource_irq {
0120 AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
0121 u8 flags;
0122 };
0123
0124 struct aml_resource_irq_noflags {
0125 AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
0126 };
0127
0128 struct aml_resource_dma {
0129 AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
0130 u8 flags;
0131 };
0132
0133 struct aml_resource_start_dependent {
0134 AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
0135 };
0136
0137 struct aml_resource_start_dependent_noprio {
0138 AML_RESOURCE_SMALL_HEADER_COMMON};
0139
0140 struct aml_resource_end_dependent {
0141 AML_RESOURCE_SMALL_HEADER_COMMON};
0142
0143 struct aml_resource_io {
0144 AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
0145 u16 minimum;
0146 u16 maximum;
0147 u8 alignment;
0148 u8 address_length;
0149 };
0150
0151 struct aml_resource_fixed_io {
0152 AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
0153 u8 address_length;
0154 };
0155
0156 struct aml_resource_vendor_small {
0157 AML_RESOURCE_SMALL_HEADER_COMMON};
0158
0159 struct aml_resource_end_tag {
0160 AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
0161 };
0162
0163 struct aml_resource_fixed_dma {
0164 AML_RESOURCE_SMALL_HEADER_COMMON u16 request_lines;
0165 u16 channels;
0166 u8 width;
0167 };
0168
0169
0170
0171
0172 #define AML_RESOURCE_LARGE_HEADER_COMMON \
0173 u8 descriptor_type;\
0174 u16 resource_length;
0175
0176 struct aml_resource_large_header {
0177 AML_RESOURCE_LARGE_HEADER_COMMON};
0178
0179
0180
0181 #define ACPI_RESOURCE_FLAG_DEC 2
0182 #define ACPI_RESOURCE_FLAG_MIF 4
0183 #define ACPI_RESOURCE_FLAG_MAF 8
0184
0185 struct aml_resource_memory24 {
0186 AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
0187 u16 minimum;
0188 u16 maximum;
0189 u16 alignment;
0190 u16 address_length;
0191 };
0192
0193 struct aml_resource_vendor_large {
0194 AML_RESOURCE_LARGE_HEADER_COMMON};
0195
0196 struct aml_resource_memory32 {
0197 AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
0198 u32 minimum;
0199 u32 maximum;
0200 u32 alignment;
0201 u32 address_length;
0202 };
0203
0204 struct aml_resource_fixed_memory32 {
0205 AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
0206 u32 address;
0207 u32 address_length;
0208 };
0209
0210 #define AML_RESOURCE_ADDRESS_COMMON \
0211 u8 resource_type; \
0212 u8 flags; \
0213 u8 specific_flags;
0214
0215 struct aml_resource_address {
0216 AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
0217
0218 struct aml_resource_extended_address64 {
0219 AML_RESOURCE_LARGE_HEADER_COMMON
0220 AML_RESOURCE_ADDRESS_COMMON u8 revision_ID;
0221 u8 reserved;
0222 u64 granularity;
0223 u64 minimum;
0224 u64 maximum;
0225 u64 translation_offset;
0226 u64 address_length;
0227 u64 type_specific;
0228 };
0229
0230 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1
0231
0232 struct aml_resource_address64 {
0233 AML_RESOURCE_LARGE_HEADER_COMMON
0234 AML_RESOURCE_ADDRESS_COMMON u64 granularity;
0235 u64 minimum;
0236 u64 maximum;
0237 u64 translation_offset;
0238 u64 address_length;
0239 };
0240
0241 struct aml_resource_address32 {
0242 AML_RESOURCE_LARGE_HEADER_COMMON
0243 AML_RESOURCE_ADDRESS_COMMON u32 granularity;
0244 u32 minimum;
0245 u32 maximum;
0246 u32 translation_offset;
0247 u32 address_length;
0248 };
0249
0250 struct aml_resource_address16 {
0251 AML_RESOURCE_LARGE_HEADER_COMMON
0252 AML_RESOURCE_ADDRESS_COMMON u16 granularity;
0253 u16 minimum;
0254 u16 maximum;
0255 u16 translation_offset;
0256 u16 address_length;
0257 };
0258
0259 struct aml_resource_extended_irq {
0260 AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
0261 u8 interrupt_count;
0262 u32 interrupts[1];
0263
0264 };
0265
0266 struct aml_resource_generic_register {
0267 AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
0268 u8 bit_width;
0269 u8 bit_offset;
0270 u8 access_size;
0271 u64 address;
0272 };
0273
0274
0275
0276 struct aml_resource_gpio {
0277 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0278 u8 connection_type;
0279 u16 flags;
0280 u16 int_flags;
0281 u8 pin_config;
0282 u16 drive_strength;
0283 u16 debounce_timeout;
0284 u16 pin_table_offset;
0285 u8 res_source_index;
0286 u16 res_source_offset;
0287 u16 vendor_offset;
0288 u16 vendor_length;
0289
0290
0291
0292
0293
0294
0295 };
0296
0297 #define AML_RESOURCE_GPIO_REVISION 1
0298
0299
0300
0301 #define AML_RESOURCE_GPIO_TYPE_INT 0
0302 #define AML_RESOURCE_GPIO_TYPE_IO 1
0303 #define AML_RESOURCE_MAX_GPIOTYPE 1
0304
0305
0306
0307 #define AML_RESOURCE_SERIAL_COMMON \
0308 u8 revision_id; \
0309 u8 res_source_index; \
0310 u8 type; \
0311 u8 flags; \
0312 u16 type_specific_flags; \
0313 u8 type_revision_id; \
0314 u16 type_data_length; \
0315
0316
0317
0318 #define AML_RESOURCE_I2C_SERIALBUSTYPE 1
0319 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2
0320 #define AML_RESOURCE_UART_SERIALBUSTYPE 3
0321 #define AML_RESOURCE_CSI2_SERIALBUSTYPE 4
0322 #define AML_RESOURCE_MAX_SERIALBUSTYPE 4
0323 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192
0324
0325 struct aml_resource_common_serialbus {
0326 AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON};
0327
0328 struct aml_resource_csi2_serialbus {
0329 AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON
0330
0331
0332
0333
0334
0335 };
0336
0337 #define AML_RESOURCE_CSI2_REVISION 1
0338 #define AML_RESOURCE_CSI2_TYPE_REVISION 1
0339 #define AML_RESOURCE_CSI2_MIN_DATA_LEN 0
0340
0341 struct aml_resource_i2c_serialbus {
0342 AML_RESOURCE_LARGE_HEADER_COMMON
0343 AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
0344 u16 slave_address;
0345
0346
0347
0348
0349
0350 };
0351
0352 #define AML_RESOURCE_I2C_REVISION 1
0353 #define AML_RESOURCE_I2C_TYPE_REVISION 1
0354 #define AML_RESOURCE_I2C_MIN_DATA_LEN 6
0355
0356 struct aml_resource_spi_serialbus {
0357 AML_RESOURCE_LARGE_HEADER_COMMON
0358 AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
0359 u8 data_bit_length;
0360 u8 clock_phase;
0361 u8 clock_polarity;
0362 u16 device_selection;
0363
0364
0365
0366
0367
0368 };
0369
0370 #define AML_RESOURCE_SPI_REVISION 1
0371 #define AML_RESOURCE_SPI_TYPE_REVISION 1
0372 #define AML_RESOURCE_SPI_MIN_DATA_LEN 9
0373
0374 struct aml_resource_uart_serialbus {
0375 AML_RESOURCE_LARGE_HEADER_COMMON
0376 AML_RESOURCE_SERIAL_COMMON u32 default_baud_rate;
0377 u16 rx_fifo_size;
0378 u16 tx_fifo_size;
0379 u8 parity;
0380 u8 lines_enabled;
0381
0382
0383
0384
0385
0386 };
0387
0388 #define AML_RESOURCE_UART_REVISION 1
0389 #define AML_RESOURCE_UART_TYPE_REVISION 1
0390 #define AML_RESOURCE_UART_MIN_DATA_LEN 10
0391
0392 struct aml_resource_pin_function {
0393 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0394 u16 flags;
0395 u8 pin_config;
0396 u16 function_number;
0397 u16 pin_table_offset;
0398 u8 res_source_index;
0399 u16 res_source_offset;
0400 u16 vendor_offset;
0401 u16 vendor_length;
0402
0403
0404
0405
0406
0407
0408 };
0409
0410 #define AML_RESOURCE_PIN_FUNCTION_REVISION 1
0411
0412 struct aml_resource_pin_config {
0413 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0414 u16 flags;
0415 u8 pin_config_type;
0416 u32 pin_config_value;
0417 u16 pin_table_offset;
0418 u8 res_source_index;
0419 u16 res_source_offset;
0420 u16 vendor_offset;
0421 u16 vendor_length;
0422
0423
0424
0425
0426
0427
0428 };
0429
0430 #define AML_RESOURCE_PIN_CONFIG_REVISION 1
0431
0432 struct aml_resource_pin_group {
0433 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0434 u16 flags;
0435 u16 pin_table_offset;
0436 u16 label_offset;
0437 u16 vendor_offset;
0438 u16 vendor_length;
0439
0440
0441
0442
0443
0444
0445 };
0446
0447 #define AML_RESOURCE_PIN_GROUP_REVISION 1
0448
0449 struct aml_resource_pin_group_function {
0450 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0451 u16 flags;
0452 u16 function_number;
0453 u8 res_source_index;
0454 u16 res_source_offset;
0455 u16 res_source_label_offset;
0456 u16 vendor_offset;
0457 u16 vendor_length;
0458
0459
0460
0461
0462
0463
0464 };
0465
0466 #define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1
0467
0468 struct aml_resource_pin_group_config {
0469 AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
0470 u16 flags;
0471 u8 pin_config_type;
0472 u32 pin_config_value;
0473 u8 res_source_index;
0474 u16 res_source_offset;
0475 u16 res_source_label_offset;
0476 u16 vendor_offset;
0477 u16 vendor_length;
0478
0479
0480
0481
0482
0483
0484 };
0485
0486 #define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1
0487
0488
0489
0490 #pragma pack()
0491
0492
0493
0494 union aml_resource {
0495
0496
0497 u8 descriptor_type;
0498 struct aml_resource_small_header small_header;
0499 struct aml_resource_large_header large_header;
0500
0501
0502
0503 struct aml_resource_irq irq;
0504 struct aml_resource_dma dma;
0505 struct aml_resource_start_dependent start_dpf;
0506 struct aml_resource_end_dependent end_dpf;
0507 struct aml_resource_io io;
0508 struct aml_resource_fixed_io fixed_io;
0509 struct aml_resource_fixed_dma fixed_dma;
0510 struct aml_resource_vendor_small vendor_small;
0511 struct aml_resource_end_tag end_tag;
0512
0513
0514
0515 struct aml_resource_memory24 memory24;
0516 struct aml_resource_generic_register generic_reg;
0517 struct aml_resource_vendor_large vendor_large;
0518 struct aml_resource_memory32 memory32;
0519 struct aml_resource_fixed_memory32 fixed_memory32;
0520 struct aml_resource_address16 address16;
0521 struct aml_resource_address32 address32;
0522 struct aml_resource_address64 address64;
0523 struct aml_resource_extended_address64 ext_address64;
0524 struct aml_resource_extended_irq extended_irq;
0525 struct aml_resource_gpio gpio;
0526 struct aml_resource_i2c_serialbus i2c_serial_bus;
0527 struct aml_resource_spi_serialbus spi_serial_bus;
0528 struct aml_resource_uart_serialbus uart_serial_bus;
0529 struct aml_resource_csi2_serialbus csi2_serial_bus;
0530 struct aml_resource_common_serialbus common_serial_bus;
0531 struct aml_resource_pin_function pin_function;
0532 struct aml_resource_pin_config pin_config;
0533 struct aml_resource_pin_group pin_group;
0534 struct aml_resource_pin_group_function pin_group_function;
0535 struct aml_resource_pin_group_config pin_group_config;
0536
0537
0538
0539 struct aml_resource_address address;
0540 u32 dword_item;
0541 u16 word_item;
0542 u8 byte_item;
0543 };
0544
0545
0546
0547 void
0548 mp_save_gpio_info(union acpi_parse_object *op,
0549 union aml_resource *resource,
0550 u32 pin_count, u16 *pin_list, char *device_name);
0551
0552 void
0553 mp_save_serial_info(union acpi_parse_object *op,
0554 union aml_resource *resource, char *device_name);
0555
0556 char *mp_get_hid_from_parse_tree(struct acpi_namespace_node *hid_node);
0557
0558 char *mp_get_hid_via_namestring(char *device_name);
0559
0560 char *mp_get_connection_info(union acpi_parse_object *op,
0561 u32 pin_index,
0562 struct acpi_namespace_node **target_node,
0563 char **target_name);
0564
0565 char *mp_get_parent_device_hid(union acpi_parse_object *op,
0566 struct acpi_namespace_node **target_node,
0567 char **parent_device_name);
0568
0569 char *mp_get_ddn_value(char *device_name);
0570
0571 char *mp_get_hid_value(struct acpi_namespace_node *device_node);
0572
0573 #endif