Loading src/drivers/ata/ahci_elphel.c +27 −1 Original line number Original line Diff line number Diff line Loading @@ -1034,7 +1034,7 @@ static ssize_t rawdev_write(struct device *dev, ///< const char *buff, ///< const char *buff, ///< size_t buff_sz) ///< size_t buff_sz) ///< { { size_t rcvd = 0; ssize_t rcvd = 0; bool proceed = false; bool proceed = false; unsigned long irq_flags; unsigned long irq_flags; struct elphel_ahci_priv *dpriv = dev_get_dpriv(dev); struct elphel_ahci_priv *dpriv = dev_get_dpriv(dev); Loading Loading @@ -1081,11 +1081,37 @@ static ssize_t rawdev_write(struct device *dev, ///< } } rcvd = jpeghead_get_data(fdata.sensor_port, buffs->jpheader_buff.iov_base, buffs->jpheader_buff.iov_len, 0); rcvd = jpeghead_get_data(fdata.sensor_port, buffs->jpheader_buff.iov_base, buffs->jpheader_buff.iov_len, 0); if (rcvd < 0) { /* free resource lock and current command slot */ if (proceed) { spin_lock_irqsave(&dpriv->flags_lock, irq_flags); dpriv->flags &= ~DISK_BUSY; spin_unlock_irqrestore(&dpriv->flags_lock, irq_flags); } reset_chunks(chunks, 0); dpriv->tail_ptr = get_prev_slot(dpriv); dpriv->flags &= ~LOCK_TAIL; dev_err(dev, "could not get JPEG header, error %d\n", rcvd); return -EINVAL; } chunks[CHUNK_LEADER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_LEADER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_TRAILER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_TRAILER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_HEADER].iov_len = rcvd - chunks[CHUNK_LEADER].iov_len; chunks[CHUNK_HEADER].iov_len = rcvd - chunks[CHUNK_LEADER].iov_len; rcvd = circbuf_get_ptr(fdata.sensor_port, fdata.cirbuf_ptr, fdata.jpeg_len, &chunks[CHUNK_DATA_0], &chunks[CHUNK_DATA_1]); rcvd = circbuf_get_ptr(fdata.sensor_port, fdata.cirbuf_ptr, fdata.jpeg_len, &chunks[CHUNK_DATA_0], &chunks[CHUNK_DATA_1]); if (rcvd < 0) { /* free resource lock and current command slot */ if (proceed) { spin_lock_irqsave(&dpriv->flags_lock, irq_flags); dpriv->flags &= ~DISK_BUSY; spin_unlock_irqrestore(&dpriv->flags_lock, irq_flags); } reset_chunks(chunks, 0); dpriv->tail_ptr = get_prev_slot(dpriv); dpriv->flags &= ~LOCK_TAIL; dev_err(dev, "could not get JPEG data, error %d\n", rcvd); return -EINVAL; } align_frame(dpriv); align_frame(dpriv); /* new command slot is ready now and can be unlocked */ /* new command slot is ready now and can be unlocked */ dpriv->flags &= ~LOCK_TAIL; dpriv->flags &= ~LOCK_TAIL; Loading src/drivers/elphel/circbuf.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -100,7 +100,7 @@ int init_ccam_dma_buf_ptr(struct platform_device *pdev) return 0; return 0; } } int circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1) ssize_t circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1) { { int ret = 1; int ret = 1; Loading src/drivers/elphel/circbuf.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -56,6 +56,6 @@ extern unsigned short circbuf_width; extern unsigned char circbuf_byrshift; extern unsigned char circbuf_byrshift; /* end of debug code */ /* end of debug code */ int circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1); ssize_t circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1); #endif /* _CIRCBUF_H */ #endif /* _CIRCBUF_H */ Loading
src/drivers/ata/ahci_elphel.c +27 −1 Original line number Original line Diff line number Diff line Loading @@ -1034,7 +1034,7 @@ static ssize_t rawdev_write(struct device *dev, ///< const char *buff, ///< const char *buff, ///< size_t buff_sz) ///< size_t buff_sz) ///< { { size_t rcvd = 0; ssize_t rcvd = 0; bool proceed = false; bool proceed = false; unsigned long irq_flags; unsigned long irq_flags; struct elphel_ahci_priv *dpriv = dev_get_dpriv(dev); struct elphel_ahci_priv *dpriv = dev_get_dpriv(dev); Loading Loading @@ -1081,11 +1081,37 @@ static ssize_t rawdev_write(struct device *dev, ///< } } rcvd = jpeghead_get_data(fdata.sensor_port, buffs->jpheader_buff.iov_base, buffs->jpheader_buff.iov_len, 0); rcvd = jpeghead_get_data(fdata.sensor_port, buffs->jpheader_buff.iov_base, buffs->jpheader_buff.iov_len, 0); if (rcvd < 0) { /* free resource lock and current command slot */ if (proceed) { spin_lock_irqsave(&dpriv->flags_lock, irq_flags); dpriv->flags &= ~DISK_BUSY; spin_unlock_irqrestore(&dpriv->flags_lock, irq_flags); } reset_chunks(chunks, 0); dpriv->tail_ptr = get_prev_slot(dpriv); dpriv->flags &= ~LOCK_TAIL; dev_err(dev, "could not get JPEG header, error %d\n", rcvd); return -EINVAL; } chunks[CHUNK_LEADER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_LEADER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_TRAILER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_TRAILER].iov_len = JPEG_MARKER_LEN; chunks[CHUNK_HEADER].iov_len = rcvd - chunks[CHUNK_LEADER].iov_len; chunks[CHUNK_HEADER].iov_len = rcvd - chunks[CHUNK_LEADER].iov_len; rcvd = circbuf_get_ptr(fdata.sensor_port, fdata.cirbuf_ptr, fdata.jpeg_len, &chunks[CHUNK_DATA_0], &chunks[CHUNK_DATA_1]); rcvd = circbuf_get_ptr(fdata.sensor_port, fdata.cirbuf_ptr, fdata.jpeg_len, &chunks[CHUNK_DATA_0], &chunks[CHUNK_DATA_1]); if (rcvd < 0) { /* free resource lock and current command slot */ if (proceed) { spin_lock_irqsave(&dpriv->flags_lock, irq_flags); dpriv->flags &= ~DISK_BUSY; spin_unlock_irqrestore(&dpriv->flags_lock, irq_flags); } reset_chunks(chunks, 0); dpriv->tail_ptr = get_prev_slot(dpriv); dpriv->flags &= ~LOCK_TAIL; dev_err(dev, "could not get JPEG data, error %d\n", rcvd); return -EINVAL; } align_frame(dpriv); align_frame(dpriv); /* new command slot is ready now and can be unlocked */ /* new command slot is ready now and can be unlocked */ dpriv->flags &= ~LOCK_TAIL; dpriv->flags &= ~LOCK_TAIL; Loading
src/drivers/elphel/circbuf.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -100,7 +100,7 @@ int init_ccam_dma_buf_ptr(struct platform_device *pdev) return 0; return 0; } } int circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1) ssize_t circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1) { { int ret = 1; int ret = 1; Loading
src/drivers/elphel/circbuf.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -56,6 +56,6 @@ extern unsigned short circbuf_width; extern unsigned char circbuf_byrshift; extern unsigned char circbuf_byrshift; /* end of debug code */ /* end of debug code */ int circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1); ssize_t circbuf_get_ptr(int sensor_port, size_t offset, size_t len, struct fvec *vect_0, struct fvec *vect_1); #endif /* _CIRCBUF_H */ #endif /* _CIRCBUF_H */