// Copyright 2014 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

#ifndef ANDROID_KERNEL_KERNEL_UTILS_H
#define ANDROID_KERNEL_KERNEL_UTILS_H

#include "android/utils/compiler.h"

#include <stddef.h>
#include <stdint.h>

ANDROID_BEGIN_HEADER

// An enum used to list of the types of Linux kernel images we need to
// handle. Unfortunately, this affects how we setup the kernel command-line
// when launching the system.
typedef enum {
    KERNEL_VERSION_2_6_29 = 0x02061d,
    KERNEL_VERSION_3_4_0  = 0x030400,
    KERNEL_VERSION_3_4_67 = 0x030443,
    KERNEL_VERSION_3_10_0 = 0x030a00,
} KernelVersion;

// Converts a string at |versionString| in the format "Linux version MM.mm.rr..."
// into a hex value 0x00MMmmrr.  On success, returns true and sets |*kernelVersion|
// appropriately
// On failure, returns false and doesn't touch |*kernelVersion|.
bool android_parseLinuxVersionString(const char* versionString,
                                     KernelVersion* kernelVersion);

// Probe the kernel image at |kernelPath| and copy the corresponding
// 'Linux version ' string into the |dst| buffer.  On success, returns true
// and copies up to |dstLen-1| characters into dst.  dst will always be NUL
// terminated if |dstLen| >= 1
//
// On failure (e.g. if the file doesn't exist or cannot be probed), return
// false and doesn't touch |dst| buffer.
bool android_pathProbeKernelVersionString(const char* kernelPath,
                                          char* dst,
                                          size_t dstLen);

// Return the serial device name prefix matching a given kernel type 
// |kernelVersion|.  I.e. this should be "/dev/ttyS" for before 3.10.0 and 
// "/dev/ttyGF" for 3.10.0 and later.
const char* android_kernelSerialDevicePrefix(KernelVersion kernelVersion);


ANDROID_END_HEADER

#endif  // ANDROID_KERNEL_KERNEL_UTILS_H
