rxts
struct list_head rxts;
struct rxts rx_pool_data[MAX_RXTS];
struct rxts *rxts;
list_for_each_safe(this, next, &dp83640->rxts) {
rxts = list_entry(this, struct rxts, list);
if (match(skb, type, rxts)) {
shhwtstamps->hwtstamp = ns_to_ktime(rxts->ns);
list_del_init(&rxts->list);
list_add(&rxts->list, &dp83640->rxpool);
INIT_LIST_HEAD(&dp83640->rxts);
static void phy2rxts(struct phy_rxts *p, struct rxts *rxts)
rxts->ns = p->ns_lo;
rxts->ns |= (p->ns_hi & 0x3fff) << 16;
rxts->ns += ((u64)sec) * 1000000000ULL;
rxts->seqid = p->seqid;
rxts->msgtype = (p->msgtype >> 12) & 0xf;
rxts->hash = p->msgtype & 0x0fff;
rxts->tmo = jiffies + SKB_TIMESTAMP_TIMEOUT;
static int expired(struct rxts *rxts)
return time_after(jiffies, rxts->tmo);
struct rxts *rxts;
list_for_each_safe(this, next, &dp83640->rxts) {
rxts = list_entry(this, struct rxts, list);
if (expired(rxts)) {
list_del_init(&rxts->list);
list_add(&rxts->list, &dp83640->rxpool);
static int match(struct sk_buff *skb, unsigned int type, struct rxts *rxts)
if (rxts->msgtype != (msgtype & 0xf))
if (rxts->seqid != seqid)
if (rxts->hash != hash)
struct rxts *rxts;
rxts = list_first_entry(&dp83640->rxpool, struct rxts, list);
list_del_init(&rxts->list);
phy2rxts(phy_rxts, rxts);
if (match(skb, skb_info->ptp_type, rxts)) {
shhwtstamps->hwtstamp = ns_to_ktime(rxts->ns);
list_add(&rxts->list, &dp83640->rxpool);
list_add_tail(&rxts->list, &dp83640->rxts);