1c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu/*
22f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * portbase.h, port base class
330bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu *
42f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Copyright (c) 2009-2010 Wind River Systems, Inc.
52f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
62f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Licensed under the Apache License, Version 2.0 (the "License");
72f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * you may not use this file except in compliance with the License.
82f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * You may obtain a copy of the License at
92f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
102f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * http://www.apache.org/licenses/LICENSE-2.0
112f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
122f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Unless required by applicable law or agreed to in writing, software
132f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * distributed under the License is distributed on an "AS IS" BASIS,
142f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
152f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * See the License for the specific language governing permissions and
162f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * limitations under the License.
17c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu */
18c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
19c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#ifndef __PORTBASE_H
20c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#define __PORTBASE_H
21c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
22974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <pthread.h>
23974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
24c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Core.h>
25c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Component.h>
26c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
27974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <list.h>
287951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu#include <queue.h>
29974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
30ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiutypedef OMX_U8* CustomMemAlloc(OMX_U32 nSizeBytes, OMX_PTR pUserData);
31ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiutypedef void  CustomMemFree(OMX_U8 *pBuffer, OMX_PTR pUserData);
32ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu
33c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuclass PortBase
34c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu{
35c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryupublic:
36c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /*
37c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu     * constructor & destructor
38c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu     */
39c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    PortBase();
4076e479a9ee63cff7cf200aceb2f52296fe63c588Ho-Eun Ryu    PortBase(const OMX_PARAM_PORTDEFINITIONTYPE *portdefinition);
41c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    virtual ~PortBase();
42c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
43c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /* end of constructor & destructor */
44c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
45cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /*
467b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu     * accessor
477b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu     */
487b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /* owner */
497b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    void SetOwner(OMX_COMPONENTTYPE *handle);
507b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    OMX_COMPONENTTYPE *GetOwner(void);
517b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu
5219b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    /* for ReturnThisBuffer() */
5319b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    OMX_ERRORTYPE SetCallbacks(OMX_HANDLETYPE hComponent,
5419b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu                               OMX_CALLBACKTYPE *pCallbacks,
5519b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu                               OMX_PTR pAppData);
5619b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    /* end of accessor */
5719b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu
58ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu    OMX_ERRORTYPE SetMemAllocator(CustomMemAlloc *pMemAlloc, CustomMemFree *pMemFree, OMX_PTR pUserData);
59ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu
60229ae5acfb89e9c1559c0394190e77ca6f23f24bZhao Liang    /* set port buffer alignment, nAlignment=0 means alignment disabled */
61229ae5acfb89e9c1559c0394190e77ca6f23f24bZhao Liang    OMX_ERRORTYPE SetMemAlignment(OMX_U32 nAlignment);
62229ae5acfb89e9c1559c0394190e77ca6f23f24bZhao Liang
637b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /*
64cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     * component methods & helpers
65cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     */
66cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* Get/SetParameter */
678b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu    OMX_ERRORTYPE SetPortDefinition(const OMX_PARAM_PORTDEFINITIONTYPE *p,
683759c620f3e8325d1fdd741caad7c397e797ad2cHo-Eun Ryu                                    bool overwrite_readonly);
698b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu    const OMX_PARAM_PORTDEFINITIONTYPE *GetPortDefinition(void);
70cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
71cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    /* Use/Allocate/FreeBuffer */
72cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE **ppBufferHdr,
73cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nPortIndex,
74cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_PTR pAppPrivate,
75cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nSizeBytes,
76cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U8 *pBuffer);
77cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE **ppBuffer,
78cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nPortIndex,
79cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_PTR pAppPrivate,
80cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nSizeBytes);
81cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE FreeBuffer(OMX_U32 nPortIndex,
82cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                             OMX_BUFFERHEADERTYPE *pBuffer);
83cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu
846fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu    /*
856fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * called in ComponentBase::TransStateToLoaded(OMX_StateIdle) or
866fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * in ComponentBase::TransStateToIdle(OMX_StateLoaded)
876fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * wokeup by Use/Allocate/FreeBuffer
886fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     */
896fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu    void WaitPortBufferCompletion(void);
906fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu
9141e08b779bbfab77f59765aa470aa93e2d81b877ywan    OMX_ERRORTYPE WaitPortBufferCompletionTimeout(int64_t mSec);
927951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    /* Empty/FillThisBuffer */
937951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    OMX_ERRORTYPE PushThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer);
947951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    OMX_BUFFERHEADERTYPE *PopBuffer(void);
957951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    OMX_U32 BufferQueueLength(void);
96a081918af785d476df2da1342eabe245eab468d0Zhao Liang    OMX_U32 RetainedBufferQueueLength(void);
977951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu
98fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu    /* Empty/FillBufferDone */
997951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    OMX_ERRORTYPE ReturnThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer);
1007951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu
101705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen    OMX_ERRORTYPE RetainAndReturnBuffer(OMX_BUFFERHEADERTYPE *pRetain, OMX_BUFFERHEADERTYPE *pReturn);
102705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen
1031e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    /* retain buffer */
1041e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    OMX_ERRORTYPE RetainThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer,
1051e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu                                   bool accumulate);
1061e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    /*
1071e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu     * components have responsibilty of calling this function to return all
1081e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu     * accumulated buffers to omx-il clients.
1091e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu     */
1101e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    void ReturnAllRetainedBuffers(void);
111a081918af785d476df2da1342eabe245eab468d0Zhao Liang    void ReturnOneRetainedBuffer(void);
1121e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu
113fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu    /* flush all buffers not under processing */
114fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu    OMX_ERRORTYPE FlushPort(void);
115fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu
116b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu    bool IsEnabled(void);
117b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu
1184f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu    OMX_DIRTYPE GetPortDirection(void);
11937787374d75727678e1f9d19191fdad363ee6c54Ho-Eun Ryu    OMX_U32 GetPortBufferCount(void);
1204f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu
1215e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu    OMX_ERRORTYPE PushMark(OMX_MARKTYPE *mark);
1225170f7519e52abd32252552df72fa16b12651a39Ho-Eun Ryu    OMX_MARKTYPE *PopMark(void);
1235e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu
124df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    /* SendCommand(OMX_CommandPortDisable/Enable) */
125df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    OMX_ERRORTYPE TransState(OMX_U8 state);
126df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu
1273ca48681b349388346b10abce74c98497d231d04Ho-Eun Ryu    /* EventHandler(OMX_EventPortSettingChanged) */
1283ca48681b349388346b10abce74c98497d231d04Ho-Eun Ryu    OMX_ERRORTYPE ReportPortSettingsChanged(void);
129ecc877a1dd44921dff3f300bc5559841f0c44ac6ywan    OMX_ERRORTYPE ReportOutputCrop(void);
130f17c91825c5ef8ac1dd211e8f641b3851dccbc4cxli    /* get frame size */
131f17c91825c5ef8ac1dd211e8f641b3851dccbc4cxli    OMX_U32 getFrameBufSize(OMX_COLOR_FORMATTYPE colorFormat, OMX_U32 width, OMX_U32 height);
1323ca48681b349388346b10abce74c98497d231d04Ho-Eun Ryu
133cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* end of component methods & helpers */
134cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
135df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    /* TransState, state */
1366eef19eccd390d878724188ac5b62f4656a97110Ho-Eun Ryu    static const OMX_U8 OMX_PortDisabled = 0;
1376eef19eccd390d878724188ac5b62f4656a97110Ho-Eun Ryu    static const OMX_U8 OMX_PortEnabled = 1;
138df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu
139c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuprivate:
140c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /* common routines for constructor */
141c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    void __PortBase(void);
142cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
14365f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu    /*
14465f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu     * component methods & helpers
14565f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu     */
14665f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu    OMX_STATETYPE GetOwnerState(void);
14765f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu
14865f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu    /* end of component methods & helpers */
14965f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu
150974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    /* buffer headers */
151974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    struct list *buffer_hdrs;
152974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    OMX_U32 nr_buffer_hdrs;
153974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */
154974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_mutex_t hdrs_lock;
155974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_cond_t hdrs_wait;
156974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
1577951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    struct queue bufferq;
1587951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu    pthread_mutex_t bufferq_lock;
1597951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu
1601e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    /* retained buffers (only accumulated buffer) */
1611e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    struct queue retainedbufferq;
1621e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu    pthread_mutex_t retainedbufferq_lock;
1631e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu
1645e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu    struct queue markq;
1655e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu    pthread_mutex_t markq_lock;
1665e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu
167df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    /* state */
168df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    OMX_U8 state;
169df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu    pthread_mutex_t state_lock;
170df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu
171ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu    CustomMemAlloc *custom_mem_alloc;
172ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu    CustomMemFree *custom_mem_free;
173ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu    OMX_PTR custom_mem_userdata;
174ab52c3ff446a8712299a0d866f8ac8372491cdcbAndy Qiu
175229ae5acfb89e9c1559c0394190e77ca6f23f24bZhao Liang    OMX_U32 mem_alignment;
176229ae5acfb89e9c1559c0394190e77ca6f23f24bZhao Liang
177cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* parameter */
1786c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu    OMX_PARAM_PORTDEFINITIONTYPE portdefinition;
1796c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu    /* room for portdefinition.format.*.cMIMEType */
1806c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu    char definition_format_mimetype[OMX_MAX_STRINGNAME_SIZE];
1816c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu
182cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam;
1837b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu
1847b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /* owner handle */
1857b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    OMX_COMPONENTTYPE *owner;
18619b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu
18719b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    /* omx standard callbacks */
18819b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    OMX_PTR appdata;
18919b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu    OMX_CALLBACKTYPE *callbacks;
1906bda193e1851c89a63c0cda1992de30c1a1c4716Ho-Eun Ryu
1916bda193e1851c89a63c0cda1992de30c1a1c4716Ho-Eun Ryu    /* wrs component handle */
1926bda193e1851c89a63c0cda1992de30c1a1c4716Ho-Eun Ryu    class ComponentBase *cbase;
193c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng
194c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng    /* Input port size limit. The limit is set to be the size of a 1080P 4:4:4 raw image size,
195c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng       which is 1920x1080x3. */
196c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng    enum {
197c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng        MAX_INPUT_PORT_SIZE = 6220800
198c3e26983a72fa51f0dff98bc66234b73f74adc17wfeng    };
199c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu};
200c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
201904a08909b5c3870414fde9faec0d74d0edd536cHo-Eun Ryu/* end of PortBase */
202904a08909b5c3870414fde9faec0d74d0edd536cHo-Eun Ryu
203c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */
204