저는 Linux에서 드라이버 개발을 처음 시작했습니다. 지정된 대상 주소에서 DMA read
작업을 실행하고 싶습니다. 그러나 수행 방법에 대한 기본 개념이 없습니다. 사운드 카드 용 새 드라이버를 작성해야합니까? 아니면 현재의 사운드 카드 드라이버가 제공하는 API (있는 경우)를 호출합니까?PCI 사운드 카드에서 DMA 작업을 트리거하는 방법
나는 내가 원하는 것은 (LDD3 Ch15에서)이 보이는 것을 상상할 수,
int dad_transfer(struct dad_dev *dev, int write, void *buffer,
size_t count)
{
dma_addr_t bus_addr;
/* Map the buffer for DMA */
dev->dma_dir = (write ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
dev->dma_size = count;
bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count,
dev->dma_dir);
dev->dma_addr = bus_addr;
/* Set up the device */
writeb(dev->registers.command, DAD_CMD_DISABLEDMA);
writeb(dev->registers.command, write ? DAD_CMD_WR : DAD_CMD_RD);
writel(dev->registers.addr, cpu_to_le32(bus_addr));
writel(dev->registers.len, cpu_to_le32(count));
/* Start the operation */
writeb(dev->registers.command, DAD_CMD_ENABLEDMA);
return 0;
}
그러나 이것은, 사용자 공간 프로그램이나 모듈 무엇을해야 하는가? registers
을 작성해야하는 대상과 방법을 알기 위해 장치 별 세부 정보를 어디에서 확인할 수 있습니까?