次に、DDI データアクセスインタフェースの簡単な例を示します。このドライバは、一度に 1 つの文字を受け付け、次の文字の受け付け準備が整ったら割り込みを生成するような、架空のリトルエンディアンデバイスに対するものです。このデバイスには 2 つのレジスタセットが実装されています。1 つは 8 ビット CSR レジスタ、もう 1 つは 8 ビットデータレジスタです。
使用例 7-1 マッピングの設定#define CSR_REG 0
#define DATA_REG 1
/*
* Initialize the device access attributes for the register
* mapping
*/
dev_acc_attr.devacc_attr_version = DDI_DEVICE_ATTR_V0;
dev_acc_attr.devacc_attr_endian_flags = DDI_STRUCTURE_LE_ACC;
dev_acc_attr.devacc_attr_dataorder = DDI_STRICTORDER_ACC;
/*
* Map in the csr register (register 0)
*/
if (ddi_regs_map_setup(dip, CSR_REG, (caddr_t *)&(pio_p->csr), 0,
sizeof (Pio_csr), &dev_acc_attr, &pio_p->csr_handle) != DDI_SUCCESS) {
mutex_destroy(&pio_p->mutex);
ddi_soft_state_free(pio_softstate, instance);
return (DDI_FAILURE);
}
/*
* Map in the data register (register 1)
*/
if (ddi_regs_map_setup(dip, DATA_REG, (caddr_t *)&(pio_p->data), 0,
sizeof (uchar_t), &dev_acc_attr, &pio_p->data_handle) \
!= DDI_SUCCESS) {
mutex_destroy(&pio_p->mutex);
ddi_regs_map_free(&pio_p->csr_handle);
ddi_soft_state_free(pio_softstate, instance);
return (DDI_FAILURE);
}