Changeset 56c0930 in mainline for uspace/lib


Ignore:
Timestamp:
2015-02-20T14:33:29Z (11 years ago)
Author:
Jan Kolarik <kolarik@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4cb0148
Parents:
ab365c4
Message:

Started writing TX and RX handlers, VIF init, setting RX filter, PLL init and calibration, some corrections. Added HW values array initialization, registered diagnostic polling fibril. But still not receiving any packets…

Location:
uspace/lib/net
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/net/ieee80211/ieee80211.c

    rab365c4 r56c0930  
    3737
    3838#include <errno.h>
    39 #include <nic.h>
     39#include <byteorder.h>
    4040
    4141#include <ieee80211_impl.h>
     
    4848static driver_ops_t ieee80211_nic_driver_ops;
    4949
     50bool ieee80211_is_data_frame(ieee80211_header_t *header)
     51{
     52        return (header->frame_ctrl &
     53                host2uint16_t_le(IEEE80211_FRAME_CTRL_FRAME_TYPE)) ==
     54                host2uint16_t_le(IEEE80211_FRAME_CTRL_DATA_FRAME);
     55}
     56
    5057static int ieee80211_open(ddf_fun_t *fun)
    5158{
     
    5360        ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data);
    5461       
     62        if(ieee80211_dev->started) {
     63                return EOK;
     64        } else {
     65                ieee80211_dev->started = true;
     66        }
     67       
    5568        int rc = ieee80211_dev->ops->start(ieee80211_dev);
    5669        if(rc != EOK)
    5770                return rc;
     71       
     72        /*
     73        rc = ieee80211_dev->ops->scan(ieee80211_dev);
     74        if(rc != EOK)
     75                return rc;
     76         */
    5877       
    5978        return EOK;
     
    7089        /* IEEE802.11 start operation must be implemented. */
    7190        if(!ieee80211_ops->start)
     91                return EINVAL;
     92       
     93        /* IEEE802.11 TX handler must be implemented. */
     94        if(!ieee80211_ops->tx_handler)
    7295                return EINVAL;
    7396       
     
    93116        ieee80211_dev->ddf_dev = ddf_dev;
    94117        ieee80211_dev->driver_data = driver_data;
     118        ieee80211_dev->started = false;
     119        ieee80211_dev->current_op_mode = IEEE80211_OPMODE_STATION;
    95120       
    96121        /* Bind NIC to device */
  • uspace/lib/net/ieee80211/ieee80211_impl.c

    rab365c4 r56c0930  
    4040#include <ieee80211_impl.h>
    4141
     42static int ieee80211_freq_to_channel(uint16_t freq)
     43{
     44        return (freq - IEEE80211_FIRST_FREQ) / IEEE80211_CHANNEL_GAP + 1;
     45}
     46
     47static int ieee80211_probe_request(ieee80211_dev_t *ieee80211_dev)
     48{
     49        size_t buffer_size = sizeof(ieee80211_header_t);
     50        void *buffer = malloc(buffer_size);
     51       
     52        /* TODO */
     53       
     54        ieee80211_freq_to_channel(ieee80211_dev->current_freq);
     55       
     56        ieee80211_dev->ops->tx_handler(ieee80211_dev, buffer, buffer_size);
     57       
     58        free(buffer);
     59       
     60        return EOK;
     61}
     62
    4263/**
    4364 * Default implementation of IEEE802.11 scan function.
     
    4970int ieee80211_scan_impl(ieee80211_dev_t *ieee80211_dev)
    5071{
    51         /** TODO */
     72        /* TODO */
     73        int rc = ieee80211_probe_request(ieee80211_dev);
     74        if(rc != EOK)
     75                return rc;
    5276       
    5377        return EOK;
  • uspace/lib/net/include/ieee80211.h

    rab365c4 r56c0930  
    4141#include <ddf/driver.h>
    4242#include <sys/types.h>
     43#include <nic.h>
    4344
    4445/** Initial channel frequency. */
    45 #define IEEE80211_FIRST_CHANNEL 2412
     46#define IEEE80211_FIRST_FREQ 2412
    4647
    4748/** Max supported channel frequency. */
    48 #define IEEE80211_MAX_CHANNEL 2472
     49#define IEEE80211_MAX_FREQ 2472
    4950
    5051/* Gap between IEEE80211 channels in MHz. */
    5152#define IEEE80211_CHANNEL_GAP 5
     53
     54#define IEEE80211_FRAME_CTRL_FRAME_TYPE 0x000C
     55#define IEEE80211_FRAME_CTRL_DATA_FRAME 0x0008
    5256
    5357struct ieee80211_dev;
     
    6569        int (*start)(struct ieee80211_dev *);
    6670        int (*scan)(struct ieee80211_dev *);
     71        int (*tx_handler)(struct ieee80211_dev *, void *, size_t);
    6772} ieee80211_ops_t;
    6873
     
    7782        /** Pointer to driver specific data. */
    7883        void *driver_data;
     84       
     85        /** Current operating frequency. */
     86        uint16_t current_freq;
     87       
     88        /** Current operating mode. */
     89        ieee80211_operating_mode_t current_op_mode;
     90       
     91        /* TODO: Probably to be removed later - nic.open function is now
     92         * executed multiple times, have to find out reason and fix it.
     93         */
     94        /** Indicates whether driver has already started. */
     95        bool started;
    7996} ieee80211_dev_t;
    8097
     98/** IEEE 802.11 header structure. */
     99typedef struct {
     100        uint16_t frame_ctrl;            /**< Little Endian value! */
     101        uint16_t duration_id;           /**< Little Endian value! */
     102        uint8_t address1[ETH_ADDR];
     103        uint8_t address2[ETH_ADDR];
     104        uint8_t address3[ETH_ADDR];
     105        uint16_t seq_ctrl;              /**< Little Endian value! */
     106        uint8_t address4[ETH_ADDR];
     107} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_header_t;
     108
     109extern bool ieee80211_is_data_frame(ieee80211_header_t *header);
    81110extern int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev,
    82111        void *driver_data, ddf_dev_t *ddf_dev);
Note: See TracChangeset for help on using the changeset viewer.