rem: { BLKDEV_MAX_SG_BLOCK_SIZE, B_UINT32_TYPE, { ui32: 0x10000 }},
add: { B_BLOCK_DEVICE_MAX_SG_BLOCK_SIZE, B_UINT32_TYPE, { ui32: 0x10000 }},
context: publish_controller(device_node_handle parent, uint16 bus_master_base, uint8 intnum, 	io_resource_handle *resources, device_node_handle *node){	device_attr attrs[] = {		// info about ourself and our consumer		{ B_DRIVER_MODULE, B_STRING_TYPE, { string: PROMISE_TX2_CONTROLLER_MODULE_NAME }},		// properties of this controller for ide bus manager		// there are always max. 2 devices		{ IDE_CONTROLLER_MAX_DEVICES_ITEM, B_UINT8_TYPE, { ui8: 2 }},		// of course we can DMA		{ IDE_CONTROLLER_CAN_DMA_ITEM, B_UINT8_TYPE, { ui8: 1 }},		// command queuing always works		{ IDE_CONTROLLER_CAN_CQ_ITEM, B_UINT8_TYPE, { ui8: 1 }},		// choose any name here		{ IDE_CONTROLLER_CONTROLLER_NAME_ITEM, B_STRING_TYPE, { string: "Promise TX2" }},		// DMA properties		// some say it must be dword-aligned, others that it can be byte-aligned;		// stay on the safe side		{ BLKDEV_DMA_ALIGNMENT, B_UINT32_TYPE, { ui32: 3 }},		// one S/G block must not cross 64K boundary		{ BLKDEV_DMA_BOUNDARY, B_UINT32_TYPE, { ui32: 0xffff }},		// size of S/G block is 16 bits with zero being 64K		{ BLKDEV_MAX_SG_BLOCK_SIZE, B_UINT32_TYPE, { ui32: 0x10000 }},		// see definition of MAX_SG_COUNT		{ BLKDEV_MAX_SG_BLOCKS, B_UINT32_TYPE, { ui32: IDE_ADAPTER_MAX_SG_COUNT }},		// private data to find controller		{ IDE_ADAPTER_BUS_MASTER_BASE, B_UINT16_TYPE, { ui16: bus_master_base }},		// store interrupt in controller node		{ IDE_ADAPTER_INTNUM, B_UINT8_TYPE, { ui8: intnum }},		{ NULL }	};	SHOW_FLOW0(2, "");	return pnp->register_device(parent, attrs, resources, node);}