diff --git a/include/hardware/gps.h b/include/hardware/gps.h
new file mode 100644
index 0000000..54b50a5
--- /dev/null
+++ b/include/hardware/gps.h
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _HARDWARE_GPS_H
+#define _HARDWARE_GPS_H
+
+#include <stdint.h>
+
+#if __cplusplus
+extern "C" {
+#endif
+
+/** milliseconds since January 1, 1970 */
+typedef int64_t GpsUtcTime;
+
+/** maximum number of Space Vehicles for gps_sv_status_callback */
+#define GPS_MAX_SVS 32
+
+
+typedef uint16_t GpsPositionMode;
+#define GPS_POSITION_MODE_STANDALONE    0
+#define GPS_POSITION_MODE_MS_BASED      1
+#define GPS_POSITION_MODE_MS_ASSISTED   2
+
+typedef uint16_t GpsStatusValue;
+// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java
+#define GPS_STATUS_NONE             0
+#define GPS_STATUS_SESSION_BEGIN    1
+#define GPS_STATUS_SESSION_END      2
+#define GPS_STATUS_ENGINE_ON        3
+#define GPS_STATUS_ENGINE_OFF       4
+
+typedef uint16_t GpsLocationFlags;
+// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java
+#define GPS_LOCATION_HAS_LAT_LONG   0x0001
+#define GPS_LOCATION_HAS_ALTITUDE   0x0002
+#define GPS_LOCATION_HAS_SPEED      0x0004
+#define GPS_LOCATION_HAS_BEARING    0x0008
+#define GPS_LOCATION_HAS_ACCURACY   0x0010
+
+typedef uint16_t GpsAidingData;
+// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java
+#define GPS_DELETE_EPHEMERIS        0x0001
+#define GPS_DELETE_ALMANAC          0x0002
+#define GPS_DELETE_POSITION         0x0004
+#define GPS_DELETE_TIME             0x0008
+#define GPS_DELETE_IONO             0x0010
+#define GPS_DELETE_UTC              0x0020
+#define GPS_DELETE_HEALTH           0x0040
+#define GPS_DELETE_SVDIR            0x0080
+#define GPS_DELETE_SVSTEER          0x0100
+#define GPS_DELETE_SADATA           0x0200
+#define GPS_DELETE_RTI              0x0400
+#define GPS_DELETE_CELLDB_INFO      0x8000
+#define GPS_DELETE_ALL              0xFFFF
+
+/**
+ * names for GPS XTRA interface
+ */
+#define GPS_XTRA_INTERFACE      "gps-xtra"
+
+/**
+ * names for GPS supplemental interface
+ * TODO: Remove not used.
+ */
+#define GPS_SUPL_INTERFACE      "gps-supl"
+
+/** The location */
+typedef struct {
+    /** contains GpsLocationFlags bits */
+    uint16_t        flags;
+    double          latitude;
+    double          longitude;
+    double          altitude;
+    float           speed;
+    float           bearing;
+    float           accuracy;
+    GpsUtcTime      timestamp;
+} GpsLocation;
+
+/** The status */
+typedef struct {
+    GpsStatusValue status;
+} GpsStatus;
+
+/** Space Vehicle info */
+typedef struct {
+    int     prn;
+    float   snr;
+    float   elevation;
+    float   azimuth;
+} GpsSvInfo;
+
+/** Space Vehicle status */
+typedef struct {
+        /** number of SVs currently visible */
+        int         num_svs;
+
+        /** Array of space vehicle info */
+        GpsSvInfo   sv_list[GPS_MAX_SVS];
+
+        /** bit mask indicating which SVs have ephemeris data */
+        uint32_t    ephemeris_mask;
+
+        /** bit mask indicating which SVs have almanac data */
+        uint32_t    almanac_mask;
+
+        /**
+         * bit mask indicating which SVs were used for
+         * computing the most recent position fix
+         */
+        uint32_t    used_in_fix_mask;
+} GpsSvStatus;
+
+/** Callback with location information */
+typedef void (* gps_location_callback)(GpsLocation* location);
+
+/** Callback with the status information */
+typedef void (* gps_status_callback)(GpsStatus* status);
+
+/** Callback with the space vehicle status information */
+typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info);
+
+/** GPS call back structure */
+typedef struct {
+        gps_location_callback location_cb;
+        gps_status_callback status_cb;
+        gps_sv_status_callback sv_status_cb;
+} GpsCallbacks;
+
+
+/** Standard GPS interface */
+typedef struct {
+    /**
+     * Open the interface and provide the callback routines
+     * to the implemenation of this interface.
+     */
+    int   (*init)( GpsCallbacks* callbacks );
+
+    /** Start navigating */
+    int   (*start)( void );
+
+    /** Stop navigating */
+    int   (*stop)( void );
+
+    /** Set requested frequency of fixes in seconds */
+    void  (*set_fix_frequency)( int frequency );
+
+    /** Close the interface */
+    void  (*cleanup)( void );
+
+    /** Inject the current time */
+    int   (*inject_time)(GpsUtcTime time, int64_t timeReference,
+                         int uncertainty);
+
+    /**
+     * The next call to start will not use the information
+     * defined in the flags. GPS_DELETE_ALL  is passed for
+     * a cold start.
+     */
+    void  (*delete_aiding_data)(GpsAidingData flags);
+
+    /**
+     * fix_frequency is time between fixes in seconds.
+     * set fix_frequency to zero for a single shot fix.
+     */
+    int   (*set_position_mode)(GpsPositionMode mode, int fix_frequency);
+
+    /** Get a pointer to extension information. */
+    const void* (*get_extension)(const char* name);
+} GpsInterface;
+
+/** The download request callback routine. */
+typedef void (* gps_xtra_download_request)();
+
+/** The download request callback structure. */
+typedef struct {
+        gps_xtra_download_request download_request_cb;
+} GpsXtraCallbacks;
+
+/** Extended interface for XTRA support. */
+typedef struct {
+    int  (*init)( GpsXtraCallbacks* callbacks );
+    int  (*inject_xtra_data)( char* data, int length );
+} GpsXtraInterface;
+
+/** returns the hardware GPS interface. */
+const GpsInterface* gps_get_hardware_interface();
+
+/**
+ * returns the qemu hardware interface GPS interface.
+ */
+const GpsInterface* gps_get_qemu_interface();
+
+/**
+ * returns the default GPS interface,
+ * implemented in lib/hardware/gps.cpp.
+ */
+const GpsInterface* gps_get_interface();
+
+#if __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // _HARDWARE_GPS_H
