uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/uip/uip_arch.h
См. документацию.
00001 /**
00002  * \addtogroup uip
00003  * {@
00004  */
00005 
00006 /**
00007  * \defgroup uiparch Функции uIP, специфичные для архитектуры
00008  * @{
00009  *
00010  * Функции в модуле, который привязан к архитектуре, для ускоренного
00011  * вычисления контрольной суммы IP и 32-битных сложений.
00012  *
00013  * Вычисление контрольной суммы IP - наиболее затратная по вычислениям
00014  * операция в стеке TCP/IP, поэтому её имеет смысл переписать на
00015  * эффективном ассемблере. Назначание модуля uip-arch - позволить
00016  * реализовать функции контрольной суммы на ассемблере, привязанном
00017  * к архитектуре.
00018  *
00019  */
00020 
00021 /**
00022  * \file
00023  * Декларирование функций, специфичных для архитектуры.
00024  * \author Adam Dunkels <adam@dunkels.com>
00025  */
00026 
00027 /*
00028  * Copyright (c) 2001, Adam Dunkels.
00029  * Все права зарезервированы. *
00030  * Повторное распространение, использование в исходном и двоичном виде,
00031  * с модификацией или без - разрешается, если выполняются следующие
00032  * условия:
00033  * 1. Распространение исходного кода должно сохранить вышеуказанную пометку
00034  *    копирайта, этот список условий и следующую правовую оговорку.
00035  * 2. Распространение исходного кода должно сохранить вышеуказанную пометку
00036  *    копирайта, этот список условий и следующую правовую оговорку в
00037  *    документации и/или других материалах, которые будут предоставлены
00038  *    вместе с распространяемыми материалами.
00039  * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть
00040  *    продукты, написанные с использованием этого программного обеспечения
00041  *    без специального на то разрешения.
00042  *
00043  * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ
00044  * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ,
00045  * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ
00046  * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН
00047  * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ
00048  * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ
00049  * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ;
00050  * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ,
00051  * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ
00052  * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ
00053  * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ
00054  * ТАКОГО ПОВРЕЖДЕНИЯ.
00055  *
00056  * Этот файл является частью стека uIP TCP/IP.
00057  *
00058  * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $
00059  *
00060  */
00061 
00062 #ifndef __UIP_ARCH_H__
00063 #define __UIP_ARCH_H__
00064 
00065 #include "uip.h"
00066 
00067 /**
00068  * Выполнение 32-разрядного сложения.
00069  *
00070  * ПОскольку не все архитектуры, для которых предназначена uIP,
00071  * имеют встроенную 32-битную арифметику, uIP использует внешнюю функцию
00072  * на языке C для выполнения 32-битных прибавлений, требуемых в обработке
00073  * протоколов TCP. Эта функция должна сложить 2 аргумента, и поместить
00074  * результат в глобальную переменную uip_acc32.
00075  *
00076  * \note 32-битное целое указывается параметром op32, и результат в
00077  * переменной uip_acc32 с сетевым порядком байт (big endian, старший байт
00078  * идет первым, младший последним).
00079  *
00080  * \param op32 Указатель на 4-байтный массив, представляющий 32-битное
00081  * целое число с сетевым порядком байт (big endian).
00082  *
00083  * \param op16 16-битное целое с порядком байт хоста.
00084  */
00085 void uip_add32(u8_t *op32, u16_t op16);
00086 
00087 /**
00088  * Вычисление контрольной суммы Internet от данных буфера.
00089  *
00090  * Контрольная сумма Internet является дополнением до единицы от суммы
00091  * с дополнением до единицы всех 16-битных слов в буфере.
00092  *
00093  * См. RFC1071.
00094  *
00095  * \note Эта функция не вызывается в текущей версии uIP, но будущие
00096  * версии могут её использовать.
00097  *
00098  * \param buf Указатель на буфер, от которого будет вычисляться
00099  * контрольная сумма.
00100  *
00101  * \param len Длина буфера, от данных которого вычисляется контрольная
00102  * сумма.
00103  *
00104  * \return Контрольная сумма Internet буфера.
00105  */
00106 u16_t uip_chksum(u16_t *buf, u16_t len);
00107 
00108 /**
00109  * Вычисляет контрольную сумму заголовка IP от заголовка пакета, который
00110  * находится в uip_buf.
00111  *
00112  * Контрольная сумма заголовка является контрольной суммой Internet
00113  * от 20 байт заголовка IP.
00114  *
00115  * \return Контрольная сумма заголовка IP от заголовка IP, который находится
00116  * в буфере uip_buf.
00117  */
00118 u16_t uip_ipchksum(void);
00119 
00120 /**
00121  * Вычисление контрольной суммы TCP пакета, находящегося в uip_buf
00122  * и uip_appdata.
00123  *
00124  * Контрольная сумма TCP является контрольной суммой Internet от содержимого
00125  * данных сегмента TCP и псевдозаголовка, определенного в RFC793.
00126  *
00127  * \note uip_appdata является указателем, указывающим на данные пакета,
00128  * и он может указывать на любое место в памяти, так что нельзя просто 
00129  * вычислить контрольную сумму Internet от содержимого буфера uip_buf.
00130  *
00131  * \return Контрольная сумма TCP сегмента TCP, находящегося в uip_buf,
00132  * в том месте, на которое указывает uip_appdata.
00133  */
00134 u16_t uip_tcpchksum(void);
00135 
00136 u16_t uip_udpchksum(void);
00137 
00138 /** @} */
00139 /** @} */
00140 
00141 #endif /* __UIP_ARCH_H__ */