Please note: This project is no longer active. The website is kept online for historic purposes only.
If you´re looking for a Linux driver for your Atheros WLAN device, you should continue here .

Ticket #1397: tsf-per-packet.diff

File tsf-per-packet.diff, 13.3 kB (added by mentor, 12 years ago)
  • net80211/ieee80211_scan.c

    old new  
    831831ieee80211_add_scan(struct ieee80211vap *vap, 
    832832        const struct ieee80211_scanparams *sp, 
    833833        const struct ieee80211_frame *wh, 
    834         int subtype, int rssi, int rstamp) 
     834        int subtype, int rssi, u_int64_t rstamp) 
    835835{ 
    836836        struct ieee80211com *ic = vap->iv_ic; 
    837837        struct ieee80211_scan_state *ss = ic->ic_scan; 
  • net80211/ieee80211_node.c

    old new  
    16011601                       ni->ni_rxseqs[i] >> IEEE80211_SEQ_SEQ_SHIFT, 
    16021602                       ni->ni_rxseqs[i] & IEEE80211_SEQ_FRAG_MASK); 
    16031603        } 
    1604         printf("\trstamp %u rssi %u intval %u capinfo 0x%x\n", 
     1604        printf("\trstamp %10llu rssi %u intval %u capinfo 0x%x\n", 
    16051605                ni->ni_rstamp, ni->ni_rssi, ni->ni_intval, ni->ni_capinfo); 
    16061606        printf("\tbssid %s essid \"%.*s\" channel %u:0x%x\n", 
    16071607                ether_sprintf(ni->ni_bssid), 
  • net80211/ieee80211_scan.h

    old new  
    100100 
    101101struct ieee80211_scanparams; 
    102102void ieee80211_add_scan(struct ieee80211vap *, const struct ieee80211_scanparams *, 
    103         const struct ieee80211_frame *, int, int, int); 
     103        const struct ieee80211_frame *, int, int, u_int64_t); 
    104104void ieee80211_scan_timeout(struct ieee80211com *); 
    105105 
    106106void ieee80211_scan_assoc_success(struct ieee80211com *, 
     
    156156        u_int8_t se_ssid[2 + IEEE80211_NWID_LEN]; 
    157157        u_int8_t se_rates[2 + IEEE80211_RATE_MAXSIZE]; 
    158158        u_int8_t se_xrates[2 + IEEE80211_RATE_MAXSIZE]; 
    159         u_int32_t se_rstamp;          /* recv timestamp */ 
     159        u_int64_t se_rstamp;          /* recv timestamp */ 
    160160        union { 
    161161                u_int8_t data[8]; 
    162162                __le64 tsf; 
     
    196196        /* add an entry to the cache */ 
    197197        int (*scan_add)(struct ieee80211_scan_state *, 
    198198                const struct ieee80211_scanparams *, 
    199                 const struct ieee80211_frame *, int, int, int); 
     199                const struct ieee80211_frame *, int, int, u_int64_t); 
    200200        /* age and/or purge entries in the cache */ 
    201201        void (*scan_age)(struct ieee80211_scan_state *); 
    202202        /* note that association failed for an entry */ 
  • net80211/ieee80211_node.h

    old new  
    136136        int ni_rxkeyoff;                        /* Receive key offset */ 
    137137 
    138138        /* hardware */ 
    139         u_int32_t ni_rstamp;                  /* recv timestamp */ 
     139        u_int64_t ni_rstamp;                  /* recv timestamp */ 
    140140        u_int32_t ni_last_rx;                   /* recv jiffies */ 
    141141        u_int8_t ni_rssi;                       /* recv ssi */ 
    142142 
  • net80211/ieee80211_scan_sta.c

    old new  
    215215 */ 
    216216static int 
    217217sta_add(struct ieee80211_scan_state *ss, const struct ieee80211_scanparams *sp, 
    218         const struct ieee80211_frame *wh, int subtype, int rssi, int rstamp) 
     218        const struct ieee80211_frame *wh, int subtype, int rssi, u_int64_t rstamp) 
    219219{ 
    220220#define ISPROBE(_st)    ((_st) == IEEE80211_FC0_SUBTYPE_PROBE_RESP) 
    221221#define PICK1ST(_ss) \ 
  • net80211/ieee80211_wireless.c

    old new  
    10641064                for (i = 0; i < number; i++) 
    10651065                        memcpy(&vap->iv_spy.mac[i * IEEE80211_ADDR_LEN], 
    10661066                                address[i].sa_data, IEEE80211_ADDR_LEN); 
    1067                 /* init rssi timestamps */ 
    1068                 memset(vap->iv_spy.ts_rssi, 0, IW_MAX_SPY * sizeof(u_int32_t)); 
     1067                /* init rssi timestamps to 0 */ 
     1068                memset(vap->iv_spy.ts_rssi, 0, sizeof(vap->iv_spy.ts_rssi)); 
    10691069        } 
    10701070        vap->iv_spy.num = number; 
    10711071 
  • net80211/ieee80211_input.c

    old new  
    193193 */ 
    194194int 
    195195ieee80211_input(struct ieee80211_node *ni, 
    196         struct sk_buff *skb, int rssi, u_int32_t rstamp) 
     196        struct sk_buff *skb, int rssi, u_int64_t rstamp) 
    197197{ 
    198198#define HAS_SEQ(type)   ((type & 0x4) == 0) 
    199199        struct ieee80211vap *vap = ni->ni_vap; 
     
    894894 */ 
    895895int 
    896896ieee80211_input_all(struct ieee80211com *ic, 
    897         struct sk_buff *skb, int rssi, u_int32_t rstamp) 
     897        struct sk_buff *skb, int rssi, u_int64_t rstamp) 
    898898{ 
    899899        struct ieee80211vap *vap; 
    900900        int type = -1; 
     
    12291229 
    12301230static void 
    12311231ieee80211_auth_open(struct ieee80211_node *ni, struct ieee80211_frame *wh, 
    1232         int rssi, u_int32_t rstamp, u_int16_t seq, u_int16_t status) 
     1232        int rssi, u_int64_t rstamp, u_int16_t seq, u_int16_t status) 
    12331233{ 
    12341234        struct ieee80211vap *vap = ni->ni_vap; 
    12351235        unsigned int tmpnode = 0; 
     
    13721372/* XXX TODO: add statistics */ 
    13731373static void 
    13741374ieee80211_auth_shared(struct ieee80211_node *ni, struct ieee80211_frame *wh, 
    1375         u_int8_t *frm, u_int8_t *efrm, int rssi, u_int32_t rstamp, 
     1375        u_int8_t *frm, u_int8_t *efrm, int rssi, u_int64_t rstamp, 
    13761376        u_int16_t seq, u_int16_t status) 
    13771377{ 
    13781378        struct ieee80211vap *vap = ni->ni_vap; 
     
    25302530 */ 
    25312531void 
    25322532ieee80211_recv_mgmt(struct ieee80211_node *ni, struct sk_buff *skb, 
    2533         int subtype, int rssi, u_int32_t rstamp) 
     2533        int subtype, int rssi, u_int64_t rstamp) 
    25342534{ 
    25352535#define ISPROBE(_st)    ((_st) == IEEE80211_FC0_SUBTYPE_PROBE_RESP) 
    25362536#define ISREASSOC(_st)  ((_st) == IEEE80211_FC0_SUBTYPE_REASSOC_RESP) 
  • net80211/ieee80211_scan_ap.c

    old new  
    250250 */ 
    251251static int 
    252252ap_add(struct ieee80211_scan_state *ss, const struct ieee80211_scanparams *sp, 
    253         const struct ieee80211_frame *wh, int subtype, int rssi, int rstamp) 
     253        const struct ieee80211_frame *wh, int subtype, int rssi, u_int64_t rstamp) 
    254254{ 
    255255        struct ap_state *as = ss->ss_priv; 
    256256        struct ieee80211vap *vap = ss->ss_vap; 
  • net80211/ieee80211_var.h

    old new  
    131131#define IW_MAX_SPY 8 
    132132struct ieee80211_spy { 
    133133        u_int8_t mac[IW_MAX_SPY * IEEE80211_ADDR_LEN]; 
    134         u_int32_t ts_rssi[IW_MAX_SPY];                /* ts of rssi value from last read */ 
     134        u_int64_t ts_rssi[IW_MAX_SPY];                /* ts of rssi value from last read */ 
    135135        u_int8_t thr_low;                       /* 1 byte rssi value, 0 = threshold is off */ 
    136136        u_int8_t thr_high;                      /* 1 byte rssi value */ 
    137137        u_int8_t num; 
     
    361361        /* Send/recv 802.11 management frame */ 
    362362        int (*ic_send_mgmt)(struct ieee80211_node *, int, int); 
    363363        void (*ic_recv_mgmt)(struct ieee80211_node *, struct sk_buff *, int, 
    364                 int, u_int32_t); 
     364                int, u_int64_t); 
    365365 
    366366        /* Send management frame to driver (like hardstart) */ 
    367367        int (*ic_mgtstart)(struct ieee80211com *, struct sk_buff *); 
  • net80211/ieee80211_proto.h

    old new  
    6363 
    6464struct ieee80211_node; 
    6565struct ieee80211_channel *ieee80211_doth_findchan(struct ieee80211vap *, u_int8_t); 
    66 int ieee80211_input(struct ieee80211_node *, struct sk_buff *, int, u_int32_t); 
    67 int ieee80211_input_all(struct ieee80211com *, struct sk_buff *, int, u_int32_t); 
     66int ieee80211_input(struct ieee80211_node *, struct sk_buff *, int, u_int64_t); 
     67int ieee80211_input_all(struct ieee80211com *, struct sk_buff *, int, u_int64_t); 
    6868int ieee80211_setup_rates(struct ieee80211_node *, const u_int8_t *, 
    6969        const u_int8_t *, int); 
    7070void ieee80211_saveie(u_int8_t **, const u_int8_t *); 
    7171void ieee80211_saveath(struct ieee80211_node *, u_int8_t *); 
    7272void ieee80211_recv_mgmt(struct ieee80211_node *, struct sk_buff *, 
    73         int, int, u_int32_t); 
     73        int, int, u_int64_t); 
    7474void ieee80211_sta_pwrsave(struct ieee80211vap *, int); 
    7575int ieee80211_hardstart(struct sk_buff *, struct net_device *); 
    7676void ieee80211_parent_queue_xmit(struct sk_buff *); 
  • ath/if_athvar.h

    old new  
    392392        struct ieee80211_node *bf_node;                 /* pointer to the node */ 
    393393        u_int32_t bf_status;                            /* status flags */ 
    394394        u_int16_t bf_flags;                             /* tx descriptor flags */ 
     395        u_int64_t bf_tsf; 
    395396#ifdef ATH_SUPERG_FF 
    396397        /* XXX: combine this with bf_skbaddr if it ever changes to accommodate 
    397398         *      multiple segments. 
     
    531532        struct ath_stats sc_stats;              /* private statistics */ 
    532533        int devid; 
    533534        int sc_debug; 
    534         void (*sc_recv_mgmt)(struct ieee80211_node *, struct sk_buff *, int, int, u_int32_t); 
     535        void (*sc_recv_mgmt)(struct ieee80211_node *, struct sk_buff *, int, int, u_int64_t); 
    535536        void (*sc_node_cleanup)(struct ieee80211_node *); 
    536537        void (*sc_node_free)(struct ieee80211_node *); 
    537538        void *sc_bdev;                          /* associated bus device */ 
  • ath/if_ath.c

    old new  
    167167static u_int8_t ath_node_getrssi(const struct ieee80211_node *); 
    168168static int ath_rxbuf_init(struct ath_softc *, struct ath_buf *); 
    169169static void ath_recv_mgmt(struct ieee80211_node *, struct sk_buff *, int, 
    170         int, u_int32_t); 
     170        int, u_int64_t); 
    171171static void ath_setdefantenna(struct ath_softc *, u_int); 
    172172static struct ath_txq *ath_txq_setup(struct ath_softc *, int, int); 
    173173static void ath_rx_tasklet(TQUEUE_ARG); 
     
    14331433                if (HAL_EINPROGRESS == retval) 
    14341434                        break; 
    14351435 
     1436                /* update the per packet TSF with sc_tsf, sc_tsf is updated on 
     1437                   each RX interrupt. */ 
     1438                bf->bf_tsf = sc->sc_tsf; 
     1439 
    14361440                /* XXX: We do not support frames spanning multiple descriptors */ 
    14371441                bf->bf_status |= ATH_BUFSTATUS_DONE; 
    14381442 
     
    53315335         * tsf to extend this to 64 bits. 
    53325336         */ 
    53335337        /* NB: Not all chipsets return the same precision rstamp */ 
    5334         u_int64_t tsf = ath_extend_tsf(sc->sc_tsf, rs->rs_tstamp); 
     5338        u_int64_t tsf = ath_extend_tsf(bf->bf_tsf, rs->rs_tstamp); 
    53355339 
    53365340        KASSERT(ic->ic_flags & IEEE80211_F_DATAPAD, 
    53375341                ("data padding not enabled?")); 
     
    54225426 */ 
    54235427static void 
    54245428ath_recv_mgmt(struct ieee80211_node *ni, struct sk_buff *skb, 
    5425         int subtype, int rssi, u_int32_t rstamp) 
     5429        int subtype, int rssi, u_int64_t rstamp) 
    54265430{ 
    54275431        struct ath_softc *sc = ni->ni_ic->ic_dev->priv; 
    54285432        struct ieee80211vap *vap = ni->ni_vap; 
     
    54495453        case IEEE80211_FC0_SUBTYPE_PROBE_RESP: 
    54505454                if (vap->iv_opmode == IEEE80211_M_IBSS && 
    54515455                    vap->iv_state == IEEE80211_S_RUN) { 
    5452                         u_int64_t tsf = ath_extend_tsf(sc->sc_tsf, rstamp); 
    54535456                        /* 
    54545457                         * Handle ibss merge as needed; check the tsf on the 
    54555458                         * frame before attempting the merge.  The 802.11 spec 
     
    54635466                        /* jal: added: don't merge if we have a desired 
    54645467                           BSSID */ 
    54655468                        if (!(vap->iv_flags & IEEE80211_F_DESBSSID) && 
    5466                                 le64_to_cpu(ni->ni_tstamp.tsf) >= tsf) { 
     5469                                le64_to_cpu(ni->ni_tstamp.tsf) >= rstamp) { 
    54675470                                DPRINTF(sc, ATH_DEBUG_STATE, 
    5468                                         "ibss merge, rstamp %u tsf %llu " 
    5469                                         "tstamp %llu\n", rstamp, (unsigned long long) tsf
     5471                                        "ibss merge, tsf %10llu tstamp %10llu\n", 
     5472                                        rstamp
    54705473                                        (unsigned long long) le64_to_cpu(ni->ni_tstamp.tsf)); 
    54715474                                (void) ieee80211_ibss_merge(ni); 
    54725475                        } 
     
    55065509        unsigned int len; 
    55075510        int type; 
    55085511        u_int phyerr; 
     5512        u_int64_t rs_tsf; 
    55095513 
    55105514        /* Let the 802.11 layer know about the new noise floor */ 
    55115515        sc->sc_channoise = ath_hal_get_channel_noise(ah, &(sc->sc_curchan)); 
     
    56995703                                   sc->sc_hwmap[rs->rs_rate].ieeerate, 
    57005704                                   rs->rs_rssi); 
    57015705 
     5706                rs_tsf = ath_extend_tsf(bf->bf_tsf, rs->rs_tstamp); 
     5707 
    57025708                /* 
    57035709                 * Locate the node for sender, track state, and then 
    57045710                 * pass the (referenced) node up to the 802.11 layer 
     
    57145720                         */ 
    57155721                        an = ATH_NODE(ieee80211_ref_node(ni)); 
    57165722                        ATH_RSSI_LPF(an->an_avgrssi, rs->rs_rssi); 
    5717                         type = ieee80211_input(ni, skb, rs->rs_rssi, rs->rs_tstamp); 
     5723                        type = ieee80211_input(ni, skb, rs->rs_rssi, rs_tsf); 
    57185724                        ieee80211_unref_node(&ni); 
    57195725                } else { 
    57205726                        /* 
     
    57285734                                ieee80211_keyix_t keyix; 
    57295735 
    57305736                                ATH_RSSI_LPF(an->an_avgrssi, rs->rs_rssi); 
    5731                                 type = ieee80211_input(ni, skb, rs->rs_rssi,rs->rs_tstamp); 
     5737                                type = ieee80211_input(ni, skb, rs->rs_rssi,rs_tsf); 
    57325738                                /* 
    57335739                                 * If the station has a key cache slot assigned 
    57345740                                 * update the key->node mapping table. 
     
    57395745                                        sc->sc_keyixmap[keyix] = ieee80211_ref_node(ni); 
    57405746                                ieee80211_unref_node(&ni); 
    57415747                        } else 
    5742                                 type = ieee80211_input_all(ic, skb, 
    5743                                         rs->rs_rssi, rs->rs_tstamp); 
     5748                                type = ieee80211_input_all(ic, skb,     rs->rs_rssi, rs_tsf); 
    57445749                } 
    57455750 
    57465751                if (sc->sc_diversity) {