Lines Matching refs:dma
203 struct tb_dma_port *dma;
210 dma = kzalloc(sizeof(*dma), GFP_KERNEL);
211 if (!dma)
214 dma->buf = kmalloc_array(MAIL_DATA_DWORDS, sizeof(u32), GFP_KERNEL);
215 if (!dma->buf) {
216 kfree(dma);
220 dma->sw = sw;
221 dma->port = port;
222 dma->base = DMA_PORT_CAP;
224 return dma;
229 * @dma: DMA control port
231 void dma_port_free(struct tb_dma_port *dma)
233 if (dma) {
234 kfree(dma->buf);
235 kfree(dma);
239 static int dma_port_wait_for_completion(struct tb_dma_port *dma,
243 struct tb_switch *sw = dma->sw;
249 ret = dma_port_read(sw->tb->ctl, &in, tb_route(sw), dma->port,
250 dma->base + MAIL_IN, 1, 50);
278 static int dma_port_request(struct tb_dma_port *dma, u32 in,
281 struct tb_switch *sw = dma->sw;
285 ret = dma_port_write(sw->tb->ctl, &in, tb_route(sw), dma->port,
286 dma->base + MAIL_IN, 1, DMA_PORT_TIMEOUT);
290 ret = dma_port_wait_for_completion(dma, timeout);
294 ret = dma_port_read(sw->tb->ctl, &out, tb_route(sw), dma->port,
295 dma->base + MAIL_OUT, 1, DMA_PORT_TIMEOUT);
302 static int dma_port_flash_read_block(struct tb_dma_port *dma, u32 address,
305 struct tb_switch *sw = dma->sw;
318 ret = dma_port_request(dma, in, DMA_PORT_TIMEOUT);
322 return dma_port_read(sw->tb->ctl, buf, tb_route(sw), dma->port,
323 dma->base + MAIL_DATA, dwords, DMA_PORT_TIMEOUT);
326 static int dma_port_flash_write_block(struct tb_dma_port *dma, u32 address,
329 struct tb_switch *sw = dma->sw;
336 ret = dma_port_write(sw->tb->ctl, buf, tb_route(sw), dma->port,
337 dma->base + MAIL_DATA, dwords, DMA_PORT_TIMEOUT);
353 return dma_port_request(dma, in, DMA_PORT_TIMEOUT);
358 * @dma: DMA control port
363 int dma_port_flash_read(struct tb_dma_port *dma, unsigned int address,
376 ret = dma_port_flash_read_block(dma, address, dma->buf,
388 memcpy(buf, dma->buf + offset, nbytes);
400 * @dma: DMA control port
409 int dma_port_flash_write(struct tb_dma_port *dma, unsigned int address,
428 memcpy(dma->buf + offset, buf, nbytes);
430 ret = dma_port_flash_write_block(dma, address, buf, nbytes);
450 * @dma: DMA control port
459 int dma_port_flash_update_auth(struct tb_dma_port *dma)
466 return dma_port_request(dma, in, 150);
471 * @dma: DMA control port
482 int dma_port_flash_update_auth_status(struct tb_dma_port *dma, u32 *status)
484 struct tb_switch *sw = dma->sw;
488 ret = dma_port_read(sw->tb->ctl, &out, tb_route(sw), dma->port,
489 dma->base + MAIL_OUT, 1, DMA_PORT_TIMEOUT);
508 * @dma: DMA control port
512 int dma_port_power_cycle(struct tb_dma_port *dma)
519 return dma_port_request(dma, in, 150);