>There is CCAN support by the old Socket-CAN drivers tree, which does not
>use the CAN device drivers interface. Nice to hear that you are trying
>to port the CCAN driver.
Yes. I am using the same as reference ;)
>> Similar to Hynix, my SOC has 2 CAN IPs and I intend to use the same
>> driver
>> to handle both the IPs.
> Could you be more precise? What SOC are you speaking about?
This is a SOC being developed by my company. It is still not officially
launced. I hope that most of the linux device drivers we are developing for
this SOC, become available as open-source code ones.
>> Now, what is the significance of stopping the `netif_queue` when the
>> priv->tx_object becomes 5.
>> This must be a limitation seen by the developer of this driver in the
>> CCAN
>> IP in Hynix.
>The netif_stop_queue() tells the network layer to stop sending packets
>via the hard_start_xmit() function. It's usually called when no more
>hardware objects/buffers are available/free for transmission. See:
>http://lxr.linux.no/#linux+v2.6.31/include/linux/netdevice.h#L1305
Many thanks for the reference. Actually I know the usage of
`netif_stop_queue`, as I last developed a ethernet driver for RealTek
switch. Actually, I am wondering if there is a limitation at the C_CAN IP
level that one can program *at most* 5 Tx objects at a time through
hard_start_xmit() function.
Infact, when I see the reference C_CAN device driver (char based) from Bosch
site(http://www.semiconductors.bosch.de/en/20/can/products/ccan.asp) "Linux
CAN Driver for HMS30C7202 (C_CAN)", I see the following interesting points:
Driver
======
ssize_t can_write( struct file *filp,
const char *buffer,
size_t length,
loff_t *offset )
{
/* Max 8 messages at the time is allowed */
if (length > 8 * sizeof( struct canmsg_t )) {
CANMSG("Trying to write more than is supported.");
return -1;
}
..
}
Application
============
/*
* Sends one or more messages through given device.
*/
int send_messages ( struct can_device_t * can_device )
{
..
printf(" Length : "); fflush( NULL);
scanf("%d", &length);
if (length < 0)
length = 0;
if (length > 8)
length = 8;
canmsg.length = length;
..
}
It also implements a bounday of 8 transmit messages that can be written to.
This seems similar to C_CAN in SocketCAN SVN:
if (priv->tx_object > 5)
netif_stop_queue(dev);
Since the Bosch user manual for C_CAN does not speak of any such limitation,
I am wondering why all drivers are setting such boundaries on no. of Tx
objects that can be xmitted. This may explain why I get issue when I use
`cansend` for multiple frames.
Regards,
Bhupesh
--
View this message in context:
http://www.nabble.com/Query-regarding-C_CAN-driver-for-Hynix-tp26030520p26054802.html
Sent from the Socket-CAN Core mailing list archive at Nabble.com.
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core