Initial commit of Atheros 6KL driver.

This driver currently only probes and prints out information for
Atheros 6004 USB NIC. The driver will fail in device_attach function.
Prepare for setting up the endpoints for usage.

NB: It seems that the Linux driver setups the endpoints "live".
This seems contrary to how e.g. uath in FreeBSD setup the endpoints,
by declaring them in a const structure in advance.

* Added enum for all endpoints used by ath6kl;
* Added function ath6kl_usb_setup_xfer_resources that prints out
type of every endpoint associated to the current interface;
Update ath6kl_usb_setup_xfer_resources with better debug info.
Setup usb_xfer for all eight endpoints.

* Added macros for all endpoint addresses;
* Added a sc_xfer array pointer to softc;
* Declared statically each endpoint with configuration
seen from the debug information when enumeration all endpoints;
* Call usbd_transfer_setup in ath6kl_usb_setup_xfer_resources;
Ath6kl: Initialize hardware parameters.

* Added a bunch of defines to core.h for the various hardware;
* Added struct ath6kl_hw to struct ath6kl_softc;
* Added new files and update Makefile accordingly:
    o init.c (only ath6kl_init_hw_params enabled)
    o target.h;
* Call ath6kl_init_hw_params from ath6kl_core_init;
Ath6KL: load ar6004 hw1.3 fw images using firmware(9).

* Add two new files that where encoded by uuencode based on
original blobs download from Linux firmware repository:
    o firmware/AR6004/hw1.3/bdata.uu
    o firmware/AR6004/hw1.3/fw-3.uu;
* Add new kernel module ath6kl_fw that registers the fw images:
    o ath6klfw_6004_bdata_hw1.3
    o ath6klfw_6004_hw1.3_fw-3;
* Enable ath6kl_init_fetch_firmwares with all the static functions
needed to load both the board and firmware blobs;
Ath6kl: partially completed ath6kl_init_hw_start.

Driver reaches the firmware mode is set state before failing.

* Add the following functions/macros for BMI layer:
    o ath6kl_bmi_read
    o ath6kl_bmi_write
    o ath6kl_bmi_write_hi32
    o ath6kl_bmi_read_hi32;
* Initialized some softc variables in ath6kl_core_create;
* Add helper function ath6kl_get_hi_item_addr;
* Partially and the following function ath6kl_core_init:
    o ath6kl_configure_target
    o ath6kl_configure_target;
Ath6kl: Completed ath6kl_configure_target.

* Add ath6kl_set_htc_params;
Ath6kl: upload board file for ar6004.

* Add two BMI function:
    o ath6kl_bmi_reg_write
    o ath6kl_bmi_reg_read
* Change the signature of ath6kl_bmi_write buf argument from 'uint8_t *'
to 'const uint8_t *'. This is more correct and also because firmware(9)
points to a const qualified area;
* Add ath6kl_upload_board_file;
* Add partially ath6kl_init_upload, which is called from ath6kl_init_hw_params;
Ath6kl: enable firmware upload functions.

NB: USB_ERR_TIMEOUT is received when trying to write firmware.
Ath6kl: firmware timeout bug fix.

The function ath6kl_bmi_lz_stream_start returned prematurely because
of an incorrect 'return 0' statement.
Ath6kl: signal BMI done.
Ath6kl: Migrate HTC pipe code.

Migrated htc_pipe.c. This code is not yet tested nor used yet!
The only thing that I have done now is to replace Linux specific
code to FreeBSD code.

Note that all 802.11 Linux code is yet to be replaced by FreeBSD.

Also I am using:
    o TAILQ queues to replace Linux lists
    o Conditional variables + mutex to replace Linux waitqueues
    o Default mutexes to replace Linux spinlocks;
Ath6kl: update interrupt endpoint properties